Problem Description
求任意给定字符串中出现次数最多的字符,如果出现最多次数的字符有多个,则只输出最先出现的字符。
Input Description
输入任意一个字符串(不超过100个字符)
Output Description
输出出现次数最多的字符。
Sample Input
this is c++ program
Sample Output
i
个人分析
这个题目我用的是LinkedHashMap来存储的
这个容器的好处在于 我以什么顺序存入就可以以什么顺序读出
这样就方便了我在同等次数的字母下 输出最先出现的字母
先用for循环挨个存入到Map容器里面 和c++不同的是我无法直接用索引来读取和修改数据
if(m.containsKey(tmp))
{
Integer n =m.get(tmp);
n++;
m.put(tmp,n);
}
else
{
m.put(tmp,1);
}
我只能以此种方式对map容器里面的数据进行修改
题解代码
import java.util.*;
import java.lang.Math;
public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
s = s.toLowerCase();
LinkedHashMap<Character, Integer> m = new LinkedHashMap<>();
for(int i = 0; i < s.length();i++)
{
char tmp = s.charAt(i);
if(tmp != ' ')
{
if(m.containsKey(tmp))
{
Integer n =m.get(tmp);
n++;
m.put(tmp,n);
}
else
{
m.put(tmp,1);
}
}
}
Set keyset = m.keySet();
Iterator it = keyset.iterator();
Integer max = -1;
while(it.hasNext())
{
Object key = it.next();
//System.out.println(key);
//System.out.println(m.get(key));
max = Math.max(max,m.get(key));
}
Set set = m.keySet();
Iterator it2 = set.iterator();
while(it2.hasNext())
{
Object key = it2.next();
if(m.get(key) == max)
{
System.out.println(key);
break;
}
}
}
}