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] 无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章