题目:输入一个字符串,找出其中字符不重复的最长子串的长度。
直接上Java代码:
package test;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
System.out.print("请输入字符串: ");
Scanner input = new Scanner(System.in);
String s = input.next();
System.out.println("不重复字符子串最大长度: " + maxLengthOfSubStr(s));
}
public static int maxLengthOfSubStr(String s){
if(s==null || "".equals(s.trim())){
return 0; //输入为空时直接返回0
}
int maxLength = 0; //记录不重复字符子串的最大长度
int size = s.length();//暂存输入长度
for(int i=0; i<size; i++){
if(size-i < maxLength){
break; //剩余的串长度比已经找出的最大值小,就没必要继续找了
}
StringBuilder iSubStr = new StringBuilder(String.valueOf(s.charAt(i)));
for(int j=i+1; j<size; j++){
String jChar = String.valueOf(s.charAt(j));
if(iSubStr.indexOf(jChar) == -1){
iSubStr = iSubStr.append(jChar);
}else{
break;//遇到重复字符,查找结束
}
}
//System.out.println(i+": "+ iSubStr);
int subSize = iSubStr.length();
if(maxLength < subSize){ //记录最长的一个
maxLength = subSize;
}
if(subSize == size){
break; //如果获得的子串就是输入的串,则不需后续查找
}
}
return maxLength;
}
}
输出结果:
请输入字符串: abcacdeg
不重复字符子串最大长度: 5