这题可以选择用String直接输入,然后全部转化为大写,应为题意上说不区分大小写,所以最好转化一下,然后用桶排序把每个字符出现的次数记录一下,以便下面输出。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s1=sc.next();
String s=s1.toUpperCase();//把输入的字符串全部转化为大写
int[] b=new int[128];//应为字符串最大不超过128,所以数组大小128就行,主要思路是用桶排序记录一下
for(int i=0;i<s.length();i++){
b[s.charAt(i)-0]++;//把每个字符出现的次数用ASCII借用数组记录下来
}
while(true){//要按着输出顺序排出来,不然输出顺序便会出错
if(b[71]>0){//如果G还存在便输出一下,自减一,下同
b[71]--;
System.out.print("G");
}
if(b[80]>0){
b[80]--;
System.out.print("P");
}
if(b[76]>0){
b[76]--;
System.out.print("L");
}
if(b[84]>0){
b[84]--;
System.out.print("T");
}
if(b[71]==0&&b[80]==0&&b[76]==0&&b[84]==0)//当此时所有字符都没有了,便结束循环
break;
}
}
}
因为Java时间比较慢,最后一个样例会超时,但用c/c++的话,按照这个思路就会通过。