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.
本题的思路是:采用一个hash表来记录字符串数组中每一个字符出现的位置,然后用一个变量start来记录在字符串中出现重复字符时的情况,如果是遇见了重复的字符才会出现dict[s[i]]>start,此时将start设置为第一次出现该字符的位置,也就是说将start之前以及start位置上的字符抛弃掉
代码如下:
int lengthOfLongestSubstring(string s) {
if(s.length() <= 0){
return 0;
}
vector<int> dict(256,-1);
int maxLen = 1,start = -1;
for(int i = 0; i != s.length(); i++){
//如果是遇见了重复的字符才会出现dict[s[i]]>start,
//此时将start设置为第一次出现该字符的位置,
//也就是说将start之前以及start位置上的字符抛弃掉
if(dict[s[i]] > start){
start = dict[s[i]];
}
dict[s[i]] = i;
maxLen = max(maxLen, i - start);
}
return maxLen;
}