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 table two pointers ~ 写的有点复杂。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.empty()) return 0;
int max = 0,ans = 1;
unordered_map<char, int> mp;
mp[s[0]] = 1;
int pre = 0;
int cur = 0;
for(int i = 1; i < s.size(); ++i){
if(mp[s[i]] == 0){
cur = i;
mp[s[i]] = i+1;
}
else{
cur = i;
pre = (mp[s[i]] > pre) ? mp[s[i]] : pre;
mp[s[i]] = i + 1;
}
max = cur - pre + 1;
if(max > ans) ans = max;
}
return ans;
}
};
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> dict(256, -1);
int maxLen = 0, start = -1;
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;
}
};