LeetCode_003 Longest Substring Without Repeating Characters(greedy)
2016-12-19 21:47
369 查看
题意:找到不含重复字符的最长子串。
思路:最开始的思路是枚举起点和终点,但是很快否决了,因为O(N^2)的时间复杂度太高了。。之后想用二分,但是仔细想了一下发现二分对于这种要求 连续的题目其实并不是特别适合。后来想到贪心,但是开始的时候贪心的思路错了。起点的思路是对的,一定是由于某个字符出现重复来重置起点;但是
终点不在第二次出现该字母的地方,而是继续往后,直到该字母出现第三次或者到了字符串结尾。也就是说我们记录字符的出现位置(ASCII,数组小于200), 当某个字母第二次出现时我们抛掉第一次出现,从第一次后计算包含第二次在内的最长子串。O(N)的时间复杂度。
第一次写的代码到第二次出现停止了,对于样例:asjrgapa输出错误结果!
后来参考了别人的代码AC,但是觉得很亏,本来自己可以的,差一点。
代码实现:
思路:最开始的思路是枚举起点和终点,但是很快否决了,因为O(N^2)的时间复杂度太高了。。之后想用二分,但是仔细想了一下发现二分对于这种要求 连续的题目其实并不是特别适合。后来想到贪心,但是开始的时候贪心的思路错了。起点的思路是对的,一定是由于某个字符出现重复来重置起点;但是
终点不在第二次出现该字母的地方,而是继续往后,直到该字母出现第三次或者到了字符串结尾。也就是说我们记录字符的出现位置(ASCII,数组小于200), 当某个字母第二次出现时我们抛掉第一次出现,从第一次后计算包含第二次在内的最长子串。O(N)的时间复杂度。
第一次写的代码到第二次出现停止了,对于样例:asjrgapa输出错误结果!
后来参考了别人的代码AC,但是觉得很亏,本来自己可以的,差一点。
代码实现:
#include <cstring> #include <cmath> using std::string; using std::max; class Solution { public: int lengthOfLongestSubstring(string s) { int len = s.size(); int sta = -1; int pos[200]; int res = 0; memset(pos,-1,sizeof(pos)); for( int i = 0; i < len; i++ ){ int tmp = (int)s[i]; if( pos[tmp] > sta ){ sta = pos[tmp]; } pos[tmp] = i; res = max(res,i-sta); } return res; } };
相关文章推荐
- LeetCode 003 Longest Substring Without Repeating Characters
- LeetCode 003: Longest Substring Without Repeating Characters
- 【JAVA、C++】LeetCode 003 Longest Substring Without Repeating Characters
- LeetCode - Longest SubString without repeating characters_003
- leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串
- LeetCode 003 Longest Substring Without Repeating Characters
- [Leetcode题解]003 Longest Substring Without Repeating Characters
- LeetCode-003 Longest Substring Without Repeating Characters
- 2017-09-07 LeetCode_003 Longest Substring Without Repeating Characters
- leetcode [003] : Longest Substring Without Repeating Characters
- 【LeetCode】003 Longest Substring Without Repeating Characters 最长的没有重复的子字符串
- 【LeetCode-面试算法经典-Java实现】【003-Longest Substring Without Repeating Characters(最长非重复子字符串)】
- leetcode解题方案--003--LongestSubstringWithoutRepeatingCharacters
- 003 Longest Substring Without Repeating Characters [Leetcode]
- [LeetCode 003] Longest Substring Without Repeating Characters
- Leetcode003 Longest Substring Without Repeating Characters
- [LeetCode]003-Longest Substring Without Repeating Characters
- LeetCode 003 Longest Substring Without Repeating Characters O(n)做法
- LeetCode-003 Longest Substring Without Repeating Characters
- LeetCode003__Longest Substring Without Repeating Characters