题意:
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
Subscribe to see which companies asked this question.
尺取法
首先设置头尾两个指针,都指向头,然后尾指针开始遍历,在遍历过程中记录每个字母出现个数,每次遍历若当前字母没有出现过,则更新答案长度。若出现过,则将头指针移到重复字母的后面一位。然后继续重复上述操作。最后返回答案即可。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length() == 1) return 1;
int l = 0, r = 0, tag[150], ans = 0;
memset(tag, 0, sizeof(tag));
for(r = 0; r < s.length(); r++) {
if(tag[s[r]]) {
//ans = max(ans, r - l);
while(s[l] != s[r]) {
tag[s[l]]--;
l++;
}
tag[s[l]]--;
l++;
}
tag[s[r]]++;
ans = max(ans, r - l + 1);
}
return ans;
}
};