有一个首尾相接的字符序列,全部元素已大写字符表示,要求截取一段包含ABCDE的连续子串,返回这一子串的长度,例如ABCYDYE,返回6,ATTMBQECPD返回7.
public class Test {
public static void main(String[] args) {
System.out.println(Test.method("ABCYDYE"));
System.out.println(Test.method("ATTMBQECPD"));
System.out.println(Test.method("ABQECD"));
}
public static int method(String s){
int num=0;
int[] ai=new int[5];
for(int i=0;i<s.length();i++){ //用来判断是否包含ABCDE
char C=s.charAt(i);
if(C=='A')
ai[0]=i;
if(C=='B')
ai[1]=i;
if(C=='C')
ai[2]=i;
if(C=='D')
ai[3]=i;
if(C=='E')
ai[4]=i;
}
for(int i=0;i<ai.length-1;i++){ //排序
for(int j=0;j<ai.length-1;j++){
if(ai[j]>ai[j+1]){
int temp=ai[j];
ai[j]=ai[j+1];
ai[j+1]=temp;
}
}
}
num=ai[4]-ai[0]+1; //得到最短长度
for(int i=0;i<ai.length-1;i++){ //首尾相连 判断最短长度
int min=ai[i]+s.length()-ai[i+1]+1;
if(min<num)
num=min;
}
return num;
}
}
我并没有判断重复的ABCDE字符,如有更好方法,请告知我,还在学习中!