无重复字符的最长子串:link
1.题目分析
最长子串问题的两个常规套路
- 双指针,以某种策略移动着两个指针。
- 以每个位置作为开始或结束作为标准。
1、本题双指针的移动策略是两个指针之间不存在重复字符,使用
map
来查询,在本题中可以使用数组来代替。
2、以每个位置作为结束为标准。
2.代码示例
class Solution {
public:
int lengthOfLongestSubstring(string s) {
//1.双指针思路 [rear, front)
//2.以每一个地方的结尾满足条件的做一次计算
int rear = 0, front = 0;
int ret = 0;
vector<int> char2times(256, 0);
while(front < s.size()){
char cur = s[front++];
char2times[cur]++;
while(char2times[cur] > 1){
char2times[s[rear++]]--;
}
ret = max(front - rear, ret);
}
return ret;
}
};