美文网首页
leetcode3M无重复字符的最长子串

leetcode3M无重复字符的最长子串

作者: 愤怒的灰机 | 来源:发表于2018-09-11 16:09 被阅读0次
题目

思路:

1. 用一个int[26]的数组记录信息,出现过则索引为c-'a'的那一项置为1;

错误:(1)并不是只有a-z,(2)同2的错误,但可以改为置为index。

2. 用一个set<Character>装出现过的字符,如果遇到重复的就clear set,并维护一个max表示最大长度

错误:不能直接clear set,因为之前的字符是部分有用的,例如:dvdf

3. 用一个map<Character,Integer>(value是在char[]中的index)来装出现过的字符,遇到重复的就删除<=重复字符index的元素,

错误:map唯一的遍历方法是利用entrySet,但是只能读不能改,否则会有同步错误,因此“删除”指定index的元素无法实现。

4. 跟3类似,但是把删除改为clear map,然后重新插入index>重复元素index的所有元素然后接着遍历。

可以通过,但是复杂度是O(n^2),有点高

5.好的解法: 因为char转int后范围是0-255,因此可以声明一个int[256]=rec,全部初始化为-1,存char在char[](Str.toCharArray())中的索引,然后维护两个指针,l和r,先r++,遇到重复的就右移l到重复点,并把遍历到的字符对应的rec中的位置置为-1,重复直到结尾。

复杂度:O(n^2)

易错点:49行,即最后一次遍历的结果不能忘

方法五代码如上 方法4代码如上:

相关文章

网友评论

      本文标题:leetcode3M无重复字符的最长子串

      本文链接:https://www.haomeiwen.com/subject/ofoygftx.html