力扣中3 无重复字符的最长子串

昨天2.28看了题解,今天试着写了一下。

class Solution { public int lengthOfLongestSubstring(String s) { //思路是再每个以i开头的求出无重复子串的长度 Set<Character> set = new HashSet<Character>(); int res=0; int len=s.length(); int flag=0; for(int i=0;i<len;i++) { for(int j=flag;j<len;j++) {//最初设置j从0开始 改成了j 发现其实应该从上次的位置开始的 if(!set.add(s.charAt(j))) { res=Math.max(res, set.size()); set.remove(s.charAt(i)); flag=j; break; } } } res=Math.max(res,set.size());//当长度为1时会输出0 消去这种情况 return res; } }
自己尝试看了一个滑动窗口【简219】题解去写 但是思路也不太一样
对于这种情况 只能识别从头开始的最长字串 字符串不会移动 一旦从头添加出现添加过的元素就bug 所以是不对的
错误代码:[对219照猫画虎]
class Solution { public int lengthOfLongestSubstring(String s) { Set<Character> set = new HashSet<Character>(); int res=0; int length=s.length(); for(int flag=length-1;flag>0;flag--) { for(int i=0;i<length;i++) { if(i>flag) { set.remove(s.charAt(i-flag-1)); } if(!set.add(s.charAt(i))) { set.clear(); //最初报错 由于没有清除 到下一次flag的时候从头添加总是已经包含此元素 break; } if(set.size()==flag+1) { res = flag+1; return res; } } } return res; } }

浙公网安备 33010602011771号