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.
//9行实现:dict用来记录每个字母最后出现的位置
//start用来记录每个子序列的起始。
//如果发现某个字符发生了重复,那么我就把start记为这个字符上一次出现的位置。
int lengthOfLongestSubstring(string s) {
vector dict(256, -1); //定义一个vector叫做dict,内容是256个-1
int maxLen = 0, start = -1; //标尺start
for (int i = 0; i != s.length(); i++) {
if (dict[s[i]] > start) //如果字符串中的字符大于标尺
start = dict[s[i]]; //那么标尺刷新;
dict[s[i]] = i; //把dict中对应的值改为i(最后应该是0123456...)
maxLen = max(maxLen, i - start); //max记为最大的i-标尺
}
return maxLen;
}