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

力扣HOT100之滑动窗口:3. 无重复字符的最长子串


看到这道题的时候立马想起来用哈希表来辅助答题,但是滑动窗口的具体实施细节忘完了,结果又去看灵神的题解,这里把详细思路说一下。
首先我们需要定义一个哈希表,用于存储子串中的各个字符的数量,这里我使用的是unordered_map类型,然后我们需要定义左右指针,分别指向窗口的左端元素和右端元素,在初始状态下,左指针和右指针指向同一个元素(字符串s的第一个字符),然后使用一个for循环来移动右指针,只要右指针指向的字符在子串中的个数<=1,就不断将右指针右移,并且更新最长无重复子串的长度,如果遇到right指针指向的字符在子串中的数量>1,则说明已经出现了重复字符,则通过一个while循环来将左指针右移,并同时将左指针指向的字符数量-1,当左指针遍历到重复字符时,先将该字符的数量-1,再将左指针右移一位,此时子串中不再包含重复字符,退出while循环,并且更新最长无重复子串的长度。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int length = s.size();  //输入字符串的长度
        int result = 0;   //用于维护最长无重复子字符串的长度
        unordered_map<char, int> hash;
        for(int left = 0, right = 0; right < length; right++){
            hash[s[right]]++;  //统计当前遍历到的字符的个数
            while(hash[s[right]] > 1){  //只有出现重复字符(一定是right右移一位才出现的)时才会触发
                //此时需要不断将左指针右移来缩小滑动窗口,以剔除重复字符
                hash[s[left]]--;
                left++;
            }
            //执行到此处,不管上面的while循环有没有触发,此时的子串一定不含重复字符
            //此时应该统计最新结果
            result = max(result, right - left + 1);
        }
        return result;
    }
};

http://www.kler.cn/a/598530.html

相关文章:

  • 【数据分享】2000—2024年我国省市县三级逐年归一化植被指数(NDVI)数据(年平均值/Shp/Excel格式)
  • Qt 控件概述 QLCDNumber 和 Progressbar
  • 深度学习框架PyTorch——从入门到精通(7)优化模型参数
  • Java UDP聊天室搭建指南
  • 群体智能优化算法-蚁狮优化算法(Ant Lion Optimizer, ALO,含Matlab源代码)
  • HQChart使用教程46-K线图如何对接第3方数据42-DRAWTEXT_LINE数据结构
  • Qt窗口控件之菜单栏QMenuBar
  • 【后端开发面试题】每日 3 题(十七)
  • 搭建简易的rtsp服务器
  • 深入理解Java对象克隆:从浅入深掌握深克隆与浅克隆
  • CMS漏洞-DeDeCMS篇
  • 【uni-app】引用公共组件
  • 新配置了一台服务器+域名共178:整个安装步骤,恢复服务
  • quartz.net条件执行
  • 供应链与生产制造L1L4级高阶流程规划框架(53页PPT)(文末有下载方式)
  • vue3 ts 注册全局组件
  • JVM 类加载器之间的层次关系,以及类加载的委托机制
  • Neo Gamma 机器人在 GTC 2025 上的突破性进展与表现分析
  • Luogu P2249 【深基13.例1】查找 --- python 3解法
  • Agent toolkits集成指南