码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-02-24 00:58:05      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:class   字符   官方   但我   solution   flag   col   color   解法   

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

惯例先说思路,借助一个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] 无重复字符的最长子串

标签:class   字符   官方   但我   solution   flag   col   color   解法   

原文地址:https://www.cnblogs.com/left4back/p/10425015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!