L1-023 输出GPLT (20 分)
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
样例:">样例:">样例:">样例:">样例:">样例:">样例:">样例:">输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
时间限制:150ms
解决方案:
用字符流输入(BufferedReader)可以大大节省输入所耗的时间,从而很多时候这样可以在算法正当的情况下即便是Java也可以避免运行超时的问题!
该题我所写的算法就通过字符流输入可以完全通过,但改为Scanner输入则会出现运行超时问题。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
int[] c = new int[4];
for(int i = 0;i<s.length();i++) {
if(s.charAt(i)=='G'||s.charAt(i)=='g')
c[0]++;
else if(s.charAt(i)=='P'||s.charAt(i)=='p')
c[1]++;
else if(s.charAt(i)=='L'||s.charAt(i)=='l')
c[2]++;
else if(s.charAt(i)=='T'||s.charAt(i)=='t')
c[3]++;
}
while(true) {
if(c[0]!=0) {
System.out.print('G');
c[0]--;
}
if(c[1]!=0) {
System.out.print('P');
c[1]--;
}
if(c[2]!=0) {
System.out.print('L');
c[2]--;
}
if(c[3]!=0) {
System.out.print('T');
c[3]--;
}
if(c[0]==0&&c[1]==0&&c[2]==0&&c[3]==0) {
break;
}
}
}
}