leetcoode 3.Longest Substring Without Repeating Characters

来源:互联网 发布:android 创建数据库 编辑:程序博客网 时间:2024/06/08 02:23

题意

找各个字符都不同的最长子串。

题解

使用STL自带的hash容器map。枚举每个起始位置开始的子串需要O(n^2),会超时。使用尺取法在O(n)时间内解决。

代码

class Solution {public:    int lengthOfLongestSubstring(string s) {         int len = s.length();        if (len == 1)            return 1;        int maxlen = 0;        int i = 0;        int j = i + 1;        map<char, int> dict; // means (character : postion)        dict[s[i]] = i;        map<char, int>::iterator eit = dict.end();        while (i < len)        {            while (j < len && dict.find(s[j]) == eit ) // find a character that has been in substring            {                dict[s[j]] = j; //not found                j++;            }            if (j == len)            {                maxlen = max(maxlen, j - i);                break;            }            else            {                maxlen = max(maxlen, j - i);                int nexti = dict[s[j]]; // old pos of s[j]                while (i <= nexti)      // update dict: delete ele from i to nexti                    dict.erase(s[i++]); // or implicit delete: dict[s[i++]] = -1;                dict[s[j]] = j;         // update s[j] into new pos                j++;            }        }        return maxlen;    }};
0 0
原创粉丝点击