您的位置:首页 > 其它

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

2019-02-24 00:06 295 查看

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

惯例先说思路,借助一个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的文章。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: