题目要求
题目分析
程序首先要能够接收一个字符串,因为题目要求能够判断1000个字符,为了尽可能缩短程序运行的时间,不使用Scanner,改用输入流操作。
拿到字符串之后,用for循环分割成一个个单个的字符。每取出一个字符,就用if-else if判断是否是gplt中的某一个。如果是,就给对应字母的计数变量加一,直到所有字符判断完毕。
判断完毕之后,用循环进行输出。GPLT各字母每输出一次就给字母的计数变量减一,减到0的时候就不再输出。这样就保证了输出顺序,并能够在数量不一样的情况下输出剩下的字母。
示例代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class L1_023 {
private static String str;
public static void main(String[] args) {
//输入一个字符串
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
try{
str = br.readLine();
}
catch(IOException e){
e.printStackTrace();
}
char c;
int num_g = 0, num_p = 0, num_l = 0, num_t = 0;
//将字符串一个一个地分割判断
for(int i = 0; i < str.length(); i++) {
c = str.charAt(i);
//如果字符是g,p,l,t中的一个,就给对应数字的计数变量加一
if(c == 'g' || c == 'G') {
num_g++;
}else if(c == 'p' || c == 'P') {
num_p++;
}else if(c == 'l' || c == 'L') {
num_l++;
}else if(c == 't' || c == 'T') {
num_t++;
}
}
//依次输出字母,直到这个字母全部输出
while(num_g > 0 || num_p > 0 || num_l > 0 || num_t >0) {
if(num_g > 0) {
System.out.print("G");
num_g--;
}
if(num_p > 0) {
System.out.print("P");
num_p--;
}
if(num_l > 0) {
System.out.print("L");
num_l--;
}
if(num_t > 0) {
System.out.print("T");
num_t--;
}
}
}
}