LeetCode (3)Longest Substring Without Repeating Characters
2017-04-12 16:30
423 查看
(3)Longest Substring Without Repeating Characters
题目:给定一个字符串的长度,发现最长的子连续串并且没有重复字符例如:“abcabcbb”,答案是“abc”,长度是3
再例:“bbbbb”,答案是“b”,长度是1
这道题是最长非重复连续子序列问题,第一个想法就是做成一个带下标的数组,然后通过数组的标记,获取序列长度。
建立两个数组,一个是字符的重复位置,此处定义为next,就是说当你发现一个字符在后面有出现的时候,就在这个位置标注下次出现的位置,比如“abcaca”,那么对于“a”有next[0]=3,next[3]=5,对于“c”有next[2]=4,每个位置都标记完成后,再建立一个数组,此处定义为first,统计第一次出现重复字符的位置,从后向前遍历,当下次出现重复字符的位置小于上一次出现的位置,也就是说next[i]是小于first[i+1]的,那么就将本位置的first值也就是first[i]赋值为next[i],不然将本位置也就是first[i]赋值为first[i+1],当所有的first赋值结束后,first数组内所有的数字是从此位置到出现重复时的位置,长度自然是 len = i - first[i],这样就可以直接获取最长非重复连续子序列长度maxlen了。
下面是参考代码:
class Solution { public: int lengthOfLongestSubstring(string s) { int next[100000],first[100000]; int len = s.length(); int i = 0, j = 0; int maxlen = 0; for(; i < len; i ++){ string str = s.substr(i,1); int index = s.find(str, i + 1); next[i] = index==-1?len:index; } first[len] = len; for(j = len - 1; j >= 0; j --){ if(first[j+1] > next[j]){ first[j] = next[j]; maxlen = maxlen > (first[j] - j)?maxlen:(first[j] - j); } else{ first[j] = first[j+1]; maxlen = maxlen > (first[j] - j)?maxlen:(first[j] - j); } } return maxlen; } };
相关文章推荐
- leetcode之Longest Substring Without Repeating Characters
- LeetCode-003 Longest Substring Without Repeating Characters
- LeetCode之3---Longest Substring Without Repeating Characters
- LeetCode 3 Longest Substring Without Repeating Characters
- Leetcode Longest Substring Without Repeating Characters
- leetcode之 Longest Substring Without Repeating Characters
- LeetCode习题笔记——Longest Substring Without Repeating Characters
- 3. Longest Substring Without Repeating Characters leetcode java
- [LeetCode] Longest Substring Without Repeating Characters 解题报告
- [Leetcode]_3 Longest Substring Without Repeating Characters
- Leetcode -- Longest Substring Without Repeating Characters
- [LeetCode] Longest Substring Without Repeating Characters
- [LeetCode] Longest Substring Without Repeating Characters最长无重复子串
- LeetCode_3_LongestSubstringWithoutRepeatingCharacters(Java Code)
- leetcode 3 Longest Substring Without Repeating Characters
- leetcode Longest Substring Without Repeating Characters
- leetcode 3 Longest Substring Without Repeating Characters最长无重复子串
- 【leetcode】Longest Substring Without Repeating Characters
- [leetcode] Longest Substring Without Repeating Characters
- 【转载】【leetcode】Longest Substring Without Repeating Characters