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

题目:

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

题意不难理解,这个题我们暴力枚举的思路是把每一个字符遍历存到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]之间至多有一个相同字符(无论何时)。

相关推荐
Dfreedom.9 小时前
计算机视觉全景图
人工智能·算法·计算机视觉·图像算法
Morwit9 小时前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
无小道10 小时前
算法——暴力+优化
算法·优化·暴力
Free Tester10 小时前
如何判断 LeakCanary 报告的严重程度
java·jvm·算法
zyq99101_110 小时前
DFS算法实战:经典例题代码解析
python·算法·蓝桥杯·深度优先
智者知已应修善业11 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
广州灵眸科技有限公司11 小时前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法
qinian_ztc11 小时前
frida 14.2.18 安装报错解决
算法·leetcode·职场和发展
AI应用实战 | RE11 小时前
012、检索器(Retrievers)核心:从向量库中智能查找信息
人工智能·算法·机器学习·langchain
凤年徐11 小时前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法