问题描述:输入任意多个字符串。当输入exit时结束程序。输出最大的子字符串。
要求:输入的字符串中,每个字符再次出现时记录其值,为该字符串长度。
例如:输入字符串:abcad 则最大子字符串为:abca
样例:
输入:abcabc
输出:abca
bcab
cabc
输入:abac
输出:aba
输入:exit
退出程序
public class BestString{
public static void main(String[] args){
int recordSum=1;
int recordI=0;
/**
*循环输入字符串,当输入exit是退出循环。
*/
while(true){
System.out.println("please input the String,if you input 'exit' will quit!! ");
java.util.Scanner scanner=new java.util.Scanner(System.in);
String str=scanner.nextLine();
String str2="exit";
if(str.equals(str2))
{
System.out.println("已退出!");
return;
}
int strLength=str.length();
int[] strRecord=new int[strLength+1];
/**
*定义一个记录数组strRecord,用来记录字符串每个位置上子串的大小
*例如:abcab 则strRecord[0]=4,strRecord[1]=4,strRecord[2]=1....
*/
for(int i=0;i<strLength;i++){
recordI=i;
for(int j=i+1;j<strLength;j++){
if(str.charAt(i)!=str.charAt(j)){
recordSum++;
if(j==strLength-1){
strRecord[i]=1;
recordSum=1;
break;
}
}
if(str.charAt(i)==str.charAt(j)){
strRecord[i]=recordSum+1;
recordSum=1;
break;
}
}
if(i==strLength-1){
strRecord[i]=1;
}
}
/**
*找到记录数组中,最大的子串值
*
*/
int sum=strRecord[0];
int flag=0;
for(int i=0;i<strLength;i++){
if(sum<strRecord[i]){
sum=strRecord[i];
}
}
/**
*如果有多个子串相等,则都输出。
*/
for(int i=0;i<strLength;i++){
if(sum==strRecord[i]){
flag=i;
for(int j=flag;j<sum+flag;j++){
System.out.print(str.charAt(j));
}
System.out.println();
}
}
}
}
}