无重复的最长子串

无重复的最长子串

 

 并不是很难 因为完全可以暴力去做 也可以参照kmp

 

但是我要说的是 这种题也可以用很经典得到滑动窗口

 

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         // 哈希集合,记录每个字符是否出现过
 5         unordered_set<char> occ;
 6         int n = s.size();
 7         // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
 8         int rk = -1, ans = 0;
 9         // 枚举左指针的位置,初始值隐性地表示为 -1
10         for (int i = 0; i < n; ++i) {
11             if (i != 0) {
12                 // 左指针向右移动一格,移除一个字符
13                 occ.erase(s[i - 1]);
14             }
15             while (rk + 1 < n && !occ.count(s[rk + 1])) {
16                 // 不断地移动右指针
17                 occ.insert(s[rk + 1]);
18                 ++rk;
19             }
20             // 第 i 到 rk 个字符是一个极长的无重复字符子串
21             ans = max(ans, rk - i + 1);
22         }
23         return ans;
24     }
25 };

 

上一篇:LeetCode1


下一篇:找到一个string中最长的不含相同的字段的子字符串