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 }

 

posted @ 2021-04-22 10:04  贾祥啊  阅读(282)  评论(1)    收藏  举报