版权声明:个人整理,仅供参考,请勿转载,如有侵权,请联系[email protected] https://blog.csdn.net/mooe1011/article/details/88224770
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew" Output: 3 Explanation: 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.
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> dict(256,-1);
int start=-1,maxlen=0;
for(int i=0;i<s.length();i++){
if(dict[s[i]]>start)
start=dict[s[i]];
dict[s[i]]=i;
maxlen=max(maxlen,i-start);
}
return maxlen;
}
};
字符强制转换为int之后,都可以得到其对应的ASCII值(应该是这样,有错欢迎指正),所以有vector<int> dict(256,-1);
以aabbcdeff为例
i | char | start | max(maxlen,i-start) |
0 | a |
-1 | (0,1) |
1 | a | 0 | (1,1) |
2 | b | 0 | (1,2) |
3 | b | 2 | (2,1) |
4 | c | 2 | (2,2) |
5 | d | 2 | (2,3) |
6 | e | 2 | (3,4) |
7 | f | 2 | (4,5) |
8 | f | 7 | (5,1) |