输入一个仅包含小写字母构成的字符串,统计其中出现次数最多的字符及其次数。
要求如下字符串长度小于等于100,若出现次数最多的字符有多个,仅输出字母表中序号最小值字符及其次数。
package net.lesscoding;
import java.util.*;
/**
* @author eleven
* @date 2021/12/16 10:17
* @apiNote
*/
public class testElevenTest {
public static void main(String[] args) {
String str = "aagdaghjkdagccccbbbb";
Set<String> checkedSet = new HashSet<>();
Map<Integer, Character> map = new HashMap<>();
int max = 0;
for (char c : str.toCharArray()) {
String checkChar = "" + c;
if(!checkedSet.contains(checkChar)){
checkedSet.add(checkChar);
int sum = str.length() - str.replace(checkChar,"").length();
max = max < sum ? sum : max;
Character character = map.get(sum);
if(character == null || c < character){
map.put(sum,c);
}
}
}
System.out.println(map);
System.out.println(map.get(max));
}
}
定义一个int nmb[26]={0},读取字符串后,逐个字符遍历,然后相应的 num[ str[i]-'a']++,最好排序输出就可以了。
参考如下:
#include <stdio.h>
int main()
{
char str[100];
int nmb[26]={0}; //记录数量
int i=0,maxindex=0;
gets(str); //读取一行字符
while(str[i] != '\0')
{
if(str[i]>='a' && str[i]<='z')
nmb[str[i]-'a']++;
i++;
}
//找出最大的
for (i=0;i<26;i++)
{
if(nmb[i] > nmb[maxindex])
maxindex = i;
}
//输出
printf("%c %d",(char)('a'+maxindex),nmb[maxindex]);
return 0;
}