Method 1: Set
for(int i=0……) 后设置一个Set,每次将没有在Set出现的字符加入到Set中,然后记录此时此刻的substring长度。每次取最大的的长度.刚开始写的时候 把Set写在第二个循环里面了,这样的话,每次进入第二个循坏都会创建一个新的Set。 这样的话,Set为空,每次取出来的字符都是第j位。这样判断Set.contains(c) 就没有意义了
public int lengthOfLongestSubstring(String s) {
if(s==null||s.length()==0){
return 0;
}
if(s.length()==1){
return 1;
}
System.out.println(s.substring(1,2));
int max = Integer.MIN_VALUE;
for (int i = 0; i < s.length(); i++) {
HashSet<Character> set = new HashSet<Character>();
for (int j = i; j < s.length(); j++) {
char c = s.charAt(j);
if(!set.contains(c)){
set.add(c);
max = Math.max(s.substring(i,j).length()+1,max);
}else{
break;
}
}
}
return max;
}
Method 2: Map可以回头自己重写一下 9月5号 update一下.