题意:给出长度为L的字符串,已经按ASCII代码降序排列,找出字符串中最长的ASCII码间隔相同的子字符串,可能有多个满足要求的相同长度的子字符串,则输出ASCII码更高的
import java.util.Scanner;
public class problem0307
{
public static void main(String[]args) {
Scanner input=new Scanner(System.in);
int t=Integer.parseInt(input.nextLine());
while(t-->0) {
String s=input.nextLine();
String res=DescendingOrder(s);
System.out.print(res+"\n");
}
}
public static String DescendingOrder(String s) {
boolean[]charSet=getCharSet(s);
int maxLen=0;
String maxString="";
for(int i=0;i<charSet.length;i++) {
if(!charSet[i]) {
continue;
}
for(int step=1;i+step<charSet.length;step++) {
int len=0;
StringBuilder sb=new StringBuilder();
for(int j=i;j<charSet.length;j+=step) {
//如果字符串中下一个字符和之前子字符串不具备相同ACSII差异,则break
if(!charSet[j]) {
break;
}
++len;
sb.insert(0, (char)(j+'A'));
}
if(len>maxLen) {
maxLen=len;
maxString=sb.toString();
}else if(len==maxLen && sb.charAt(0)> maxString.charAt(0)) {
maxString=sb.toString();
}
}
}
return maxString;
}
//将字符串转化为boolean型数组
public static boolean[] getCharSet(String s) {
boolean []alphabet=new boolean[26];
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
alphabet[c-'A']=true;
}
return alphabet;
}
}