【题目】
给定str,返回其最长无重复字符子串的长度。
要求时间复杂度为O(N).
【举例】
public static void main(String[] args) {
String s="abcd";
System.out.println(maxNoRepeat(s));//4
s="aabcb";
System.out.println(maxNoRepeat(s));//3
}
【代码】
//找到字符串的最长无重复字符子串
public static int maxNoRepeat(String str){
if(str==null || str.equals("")){
return 0;
}
char[] chas=str.toCharArray();
boolean[] dep=new boolean[256];
String res1="";//存最大的无重复字符串子串
String res0="";//存当前的无重复字符子串
for(int i=0;i<chas.length;i++){
if(dep[chas[i]]!=true){
res0+=chas[i];
dep[chas[i]]=true;
}
else{//遇到出现过的字符,重新存res[0],以当前字符chas[i]开始
res1=res0.length()>res1.length()?res0:res1;
res0=String.valueOf(chas[i]);
}
}
return Math.max(res0.length(), res1.length());
}
【注】
在eclipse的编译调试下,做出来的第二题~
虽然不知道到底是否真的对,但不想看书上的解析啦~
如果有问题或不符合要求,欢迎批评指正~