当前位置: 首页 > news >正文

滑动窗口——无重复字符最长的字串

题目:

子字符串,我们也可以看成子数组。

题意不难理解,这个题我们暴力枚举的思路是把每一个字符遍历存到hash桶中,如果放两次就进行结果更新。

但这个题我们有更优化的方法,利用数组代替hash(重点不在这!!)。我们用滑动窗口的原理(同向双指针),先让left和right指向头,然后判断right所对应的数组下标是否为1(利用标记来达到桶的效果初始全为0),如果为0则标记为1,right++;如果为大于1,先更新结果,left++,然后right++,这里right不重新回到left再遍历是我们已经能证明二者之间一定无重复字符了。直到right走到尾。

int Solution(string s)
{int hash[128]={0};int left=0,right=0,n=s.size();int ret=0;while(right<n){ hash[s[right]]++;while(hash[s[right]]>1){hash[s[left++]]--;}ret=max(ret,right-left+1);right++;}return ret;
}

 

注意一下代码里的第二个while为什么不是if。因为我们要避开那种相同字符连续的情况(比如abbcde)这样的话如果我们使用if就无法实现让重复字符的hash--。即确保[left, right]之间至多有一个相同字符(无论何时)。

相关文章:

  • 蓝桥杯国赛备赛——字符串
  • Redis持久化存储介质评估:NFS与Ceph的适用性分析
  • 数据中心 第十五次CCF-CSP计算机软件能力认证
  • 护照阅读器简介
  • Spring MVC Controller 方法的返回类型有哪些?
  • Android Car Input HAL
  • MCP学习
  • C++初阶 —— 类和对象
  • 如何使用UGUI的EventTrigger
  • 南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新
  • 汽车免拆诊断案例|车辆行驶中急加速车身抖动故障排除 2 例
  • 台州智惠自动化签约智橙PLM,让创新持续发生
  • 挑战用豆包教我学Java01天
  • 软件测试需求之测试类型分析
  • Xilinx XCKU11P-2FFVA1156I 赛灵思 FPGA AMD Kintex UltraScale+
  • linux下MySql的安装与配置
  • java实现一个操作日志模块功能,怎么设计
  • 黄金分割法(0.618 法)
  • 机器学习实操 第二部分 神经网路和深度学习 第14章 使用卷积神经网络进行深度计算机视觉
  • 【LLM+Code】Devin PromptTools详细解读
  • 巴西总统卢拉昨晚抵达北京
  • 姚洋将全职加盟上海财经大学,担任滴水湖高级金融学院院长
  • 宜昌全域高质量发展:机制创新与产业重构的双向突围
  • 母亲节|写给妈妈
  • 快评|印巴为何停火?已达成“一场胜利,各自表述”的效果
  • 印度证实印巴已同意停火