南阳OJ-题目241:字母统计

xiaoxiao2021-02-28  89

题目描述:

字母统计

时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 1 描述 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个。 输入 第一行输入一个正整数T(0<T<25) 随后T行输入一个字符串s,s长度小于1010。 输出 每组数据输出占一行,输出出现次数最多的字符; 样例输入 3 abcd bbaa jsdhfjkshdfjksahdfjkhsajkf 样例输出 a a j

运行代码:

1.我的代码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* * Dragon 2017.8.31 * 字母统计 */ public class Num_241 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int t=Integer.parseInt(in.readLine()); while(t-->0) { String input=in.readLine(); int[] letter=new int[27];//从1开始 GetResult(input,input.length(),letter); int index=FindChar(letter); System.out.printf("%c\n",(index+96)); } } //从字符串中记录每一个字符出现的次数,保存在letter数组中 private static void GetResult(String input, int len, int[] letter) { for(int i=0;i<len;i++) { int index=input.charAt(i)-96; letter[index]++; //System.out.println("#字母:"+input.charAt(i)+"的次数为:"+letter[index]); } } //从letter字母数组中找到次数最多(包括最小的情况)的字母,返回letter中的下标 private static int FindChar(int[] letter) { int max=letter[1]; int index=1; for(int i=2;i<27;i++) { if(max<letter[i]) { max=letter[i]; index=i; } } //System.out.println("经过搜索,下标最大的是:"+index); return index; } } 2.更快更简洁的代码,思路相同 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader cin = new BufferedReader(new InputStreamReader(System.in)); int nn = Integer.parseInt(cin.readLine()); while(nn-- >0) { String str = cin.readLine(); char[] ch = str.toCharArray(); System.out.println((char)tongji(ch)); } } static int tongji (char[] ch) { int[] sum = new int[27]; for(int x=0; x<ch.length; x++) sum[ch[x]-97]++; //a sum[0] +++ int max = 0; for(int y=0; y<sum.length-1; y++) if(sum[max]<sum[y+1]) max=y+1; return max+97; } }
转载请注明原文地址: https://www.6miu.com/read-47337.html

最新回复(0)