LeetCode[3] 无重复字符的最长子串

Posted left4back

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode[3] 无重复字符的最长子串相关的知识,希望对你有一定的参考价值。

一道非常老的题目了,看上去很眼熟,但由于自己是个铁憨憨,还是在参考了官方解法后想了很久才把它完成。

惯例先说思路,借助一个hash数组记录上一次出现该字母的位置,两次出现该字母中间的长度就是这一段无重复子串的长度。

举个例子,字符串abcabcbb,第一次出现字母a的位置为0,第二次出现字母a的位置为3,两次出现字母a中间的长度3就是无重复子串abc的长度。

出现重复字母就可以从重复的字母位置开始继续向下探索了,还是以abcabcbb为例,位置3出现重复字母,我们只需从位置3继续向下探索,而不是位置1。

以下是代码,说句题外话,虽然该题难度写的是medium,但我觉得这应该已经算入门级hash算法题了,并不medium。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = s.size(), ans = 0;
        if (len >= 1) ans = 1;
        int *index = new int[128]();
        for (int i = 0, j = 0; i < len; ++i) {
            j = max(index[s[i]], j);
            ans = max(ans, i - j + 1);
            index[s[i]] = i+1;
        }
        return ans;
    }
};

最后给自己立个flag,下周写一篇关于triplet的文章。

以上是关于LeetCode[3] 无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-3.无重复字符的最长子串

LeetCode 无重复字符的最长子串

[LeetCode]无重复字符的最长子串

leetcode题解#3:无重复字符的最长子串

Python版[leetcode]3. 无重复字符的最长子串(难度中等)

LeetCode3. 无重复字符的最长子串