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.
常规做法, 称之为双指针吧,i和j, 每次移动j, 如果有重复的则把i往右移动,
class Solution { public: int lengthOfLongestSubstring(string s) { unordered_map<char,int> table; int res=0; for(int i=0,j=0;i<=j&&j<s.size();) { auto iter=table.find(s[j]); if(table.end()!=iter) { i=max(i,iter->second+1); //尤其注意这里的max, 不然i有可能变小 iter->second=j; } else { table[s[j]]=j; } printf("%d %d\n",i,j); res=max(res,j-i+1); ++j; } return res; } };