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

题目:

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

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

相关推荐
Rabitebla2 小时前
C++11 新特性详解(一):列表初始化、initializer_list 与右值引用
java·开发语言·数据结构·c++·算法·leetcode·list
XMAIPC_Robot2 小时前
RK3588+STM32:高性能机器人运动控制解决方案,兼顾实时性与AI算力
人工智能·stm32·嵌入式硬件·算法·fpga开发·机器人·arm+fpga
天吾cc2 小时前
RTT-MQTT
网络·单片机·嵌入式硬件·算法
vivo互联网技术2 小时前
MagicBokeh:单步统一生成式框架实现真实感长焦虚化渲染 | CVPR 2026 Oral
人工智能·算法
lucas_AI3 小时前
Grok 4.6:追平 GPT-5.6 Sol 的半价旗舰,但别只看跑分
人工智能·算法
zephyr053 小时前
链表实现O(n log n)时间复杂度的排序——归并排序详解
java·数据结构·算法
喜欢睡觉3 小时前
双指针判断子序列
算法
贵慜_Derek3 小时前
vLLM-07|MegaMoE 与 FusedMoE:路由相同,算 expert 完全不同
人工智能·算法·llm
机器学习之心3 小时前
基于改进鲸鱼优化算法的CNN-BiLSTM-MATT短期电力负荷预测模型
人工智能·算法·cnn·cnn-bilstm-matt·短期电力负荷预测
windliang3 小时前
Claude Code 源码分析(十):MCP 外部工具如何进入下一轮 Agent 调用
前端·算法·面试