leetcode 刷题 题3. 无重复字符的最长子串
发布日期:2021-05-20 10:42:24 浏览次数:22 分类:精选文章

本文共 954 字,大约阅读时间需要 3 分钟。

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

示例:输入:“pwwkew”,输出:3。解释:最长的子串是“wke”,长度为3。

解决方案:滑动窗口法核心思路是使用两个指针left和right,left指针指窗口的左端,right指针扩展到尽可能远的位置。当遇到重复字符时,移动left指针到右重复字符的下一个位置,继续扩展right,维护一个不含重复字符的窗口。

如何实现:使用unordered_set数据结构记录当前窗口中出现过的字符。当遇到重复字符时,循环移除左侧重复字符,直到不再包含重复字符。然后移动left指针到下一个位置,继续扩展窗口。

代码参考:

int lengthOfLongestSubstring(string s) {    int left = 0;    int max_len = 0;    unordered_set
char_set; // 存储当前窗口中字符 if (s.empty()) { return 0; } for (int right = 0; right < s.size(); ++right) { if (char_set.find(s[right]) != char_set.end()) { // 当前字符已经存在,移除左侧的重复字符 while (char_set.find(s[right]) != char_set.end()) { char_set.erase(char_set.begin()); left++; } } char_set.insert(s[right]); max_len = max(max_len, right - left + 1); } return max_len;}

优化点:

  • 使用unordered_set来记录字符,确保快速查找重复字符。
  • 当遇到重复字符时,通过循环移除左侧字符,保持窗口有效性。
  • 计算并更新最长窗口长度,保持代码简洁。
上一篇:C++容器笔记
下一篇:leetcode 刷题 题2.两数相加

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月22日 13时50分34秒