L1-023 输出GPLT (20 分) java题解 GPLT天梯赛防坑技巧
上题目先
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
代码长度限制
16 KB
时间限制
150 ms
内存限制
64 MB
这是一道GPLT里面的经典题目,十分简单,我之前尝试不同方法做,但是都不能全部通过;
这种题目用c/c++的做一遍过,但是java不一样,语言和机制不一样会导致很多新手掉入一个
无底洞,不是开玩笑,你不注意还真的不知道原因,所以细节很重要
因为在java里面 Scnner 这个东西他不像 c语言的scanf,getchar等输入
他们不占内存,我也试过python,也不会报错,为什么呢,就是因为Scanner存在着很多问题,
java是使用Unicode(双字节)编码,Scanner也是读双字节,而在java里面
BufferedReader 输入流或者输出流就派上用场了,所以入坑Java尽量使用IO解决出入问题,这也能提升自己。

1 import java.io.BufferedReader;
2 import java.io.InputStreamReader;
3 public class Main {
4 static int g,p,l,t;
5 public static void main(String args[]) throws Exception{
6 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
7 String str=br.readLine();
8 for (int i=0;i<str.length();i++){
9 if (str.charAt(i)=='G'||str.charAt(i)=='g')g++;
10 if (str.charAt(i)=='P'||str.charAt(i)=='p')p++;
11 if (str.charAt(i)=='L'||str.charAt(i)=='l')l++;
12 if (str.charAt(i)=='T'||str.charAt(i)=='t')t++;
13 }
14 while (true){
15 if (g==0&&p==0&&l==0&&t==0)break;
16 if (g!=0){
17 System.out.print("G");
18 g--;
19 }
20 if (p!=0){
21 System.out.print("P");
22 p--;
23 }
24 if (l!=0){
25 System.out.print("L");
26 l--;
27 }
28 if (t!=0){
29 System.out.print("T");
30 t--;
31 }
32 }
33 }
34 }

浙公网安备 33010602011771号