LeetCode题解——Longest Substring Without Repeating Characters
题目:
给定一个字符串,返回其中不包含重复字符的最长子串长度。
解法:
维持两个指针,第一个指向子串开始,第二个负责遍历,当遍历到的字符出现在子串内时,应计算当前子串长度,并更新最长值;然后第一个指针更新为出现位置的下一个。
代码:
1 class Solution {
2 public:
3 int lengthOfLongestSubstring(string s) {
4 int last_pos[256]; //记录每个字符最后一次出现位置
5 fill(last_pos, last_pos + 256, -1);
6
7 int start = 0, max_len = 0; //start指向当前子串第一个字符
8 int slen = s.size();
9
10 for(int stop = 0; stop < slen; ++stop) //stop用于遍历
11 {
12 char c = s[stop];
13
14 if(last_pos[c] >= start) //stop指向的字符出现在子串内部
15 {
16 max_len = max(stop - start, max_len); //更新最长值
17 start = last_pos[c] + 1; //更新第一个字符指针
18 }
19 last_pos[c] = stop; //更新当前字符最后出现位置
20 }
21
22 return max(max_len, slen - start); //循环停止时,最后一个子串没有参与计算,所以在这里计算其长度并对比
23 }
24 };