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;
    }
};