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

题目:

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

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

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

cpp 复制代码
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]之间至多有一个相同字符(无论何时)。

相关推荐
秋难降19 分钟前
贪心算法:看似精明的 “短视选手”,用好了也能逆袭!💥
java·算法
没故事的燕同学26 分钟前
C++递推
算法
一只自律的鸡30 分钟前
STL之vector
开发语言·c++·算法
GEEK零零七1 小时前
Leetcode 159. 至多包含两个不同字符的最长子串
算法·leetcode·滑动窗口
MindTechBuilder2 小时前
实时通信的深度技术剖析
算法
似水এ᭄往昔2 小时前
【数据结构】——二叉树--链式结构
数据结构·算法
地平线开发者2 小时前
征程 6X VDSP 调试方法
算法·车载系统·自动驾驶
Ymmmm__2 小时前
leetcode动态规划—买卖股票系列
算法·leetcode·动态规划
极光雨雨3 小时前
【算法】贪心算法
算法·贪心算法
asom223 小时前
LeetCode Hot100(动态规划)
算法·leetcode·动态规划