一、问题描述
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.
二、思路
开始没有用辅助空间,导致不能正常AC,后来果断采用辅助空间。
原理是:采用两个标量i和start,i代表一个快指针,start代表慢指针,子串的长度即为i - start,当第二次出现某个字符时,start才会移动。
三、代码
class Solution {
public:
int lengthOfLongestSubstring(string s){
vector<int> v(256,-1);
int max_len = 0; int start = -1;
for(int i = 0; i < s.size(); ++i){
if(v[s[i]] > start)
start = v[s[i]];
v[s[i]] = i;
max_len = max(max_len, i - start);
}
return max_len;
}
};