lintcode-384-最长无重复字符的子串

384-最长无重复字符的子串

给定一个字符串,请找出其中无重复字符的最长子字符串。

样例

例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3。
对于,"bbbbb",其无重复字符的最长子字符串为"b",长度为1。

挑战

O(n) 时间

标签

哈希表 字符串处理 两根指针

思路

参考 http://blog.csdn.net/wangyuquanliuli/article/details/45724887

遍历该字符串,每遍历一个字母时,利用map去找该字母最近一次出现是什么时候,中间这一段便是无重复字符的字符串

code

class Solution {
public:
    /*
     * @param : a string
     * @return: an integer
     */
    int lengthOfLongestSubstring(string s) {
        // write your code here
        int size = s.size();
        if (size <= 1) {
            return size;
        }

        int result = 0, begin = 1;
        map<char, int> map;
        for (int i = 1; i <= size; i++) {
            if (map[s[i - 1]] >= begin) {
                begin = map[s[i - 1]] + 1;
                map[s[i - 1]] = i;
            }
            else {
                map[s[i - 1]] = i;
                result = max(result, i - begin +1);
            }
        }
        return result;
    }
};
原文地址:https://www.cnblogs.com/libaoquan/p/7326386.html