200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【算法】大搜车——找出一个字符串中出现次数最多的字符 如果有多个出现次数相同的字

【算法】大搜车——找出一个字符串中出现次数最多的字符 如果有多个出现次数相同的字

时间:2021-05-18 23:44:34

相关推荐

【算法】大搜车——找出一个字符串中出现次数最多的字符 如果有多个出现次数相同的字

题目描述:找出一个字符串中出现次数最多的字符,如果有多个出现次数相同的字符,那就找出最先出现的那个字符

思考:

我的第一反应是分三步:

遍历字符串,统计每个字符出现的次数找出最大的次数找出最大次数对应的那个字符

这样解决是没有问题的,但是太笨了,遍历了三次。经过思考,发现可以利用map的特性,只需要遍历一次就可以解决问题,贴上代码如下:

/*** 找出一个字符串中出现次数最多的字符,如果有多个出现次数相同的字符,就找出最先出现的那个。*/public class FirstChar {/*** 使用倒序查找的方式找到首先出现的次数最多的那个字符* @param str* @return*/private static char searchFirstChar(String str) {// 定义一个map,根据键值的唯一性,使用字符串中的字符作为键,出现的次数作为值Map<Character, Integer> map = new HashMap<>();// 将字符串转化为字符数组char[] ch = str.toCharArray();// 定义一个最大次数,初始值为0int max = 0;// 定义出现次数最多的字符,初始值为第一个字符char ret = ch[0];// 倒叙遍历字符串数组for (int i = ch.length - 1; i >= 0; i--) {// 如果map中存在该字符,则将map中的value加1,也就是字符出现的次数加1,// 否则就设置当前字符出现的次数为1if (map.containsKey(ch[i])) {// 将该字符出现的次数加1map.put(ch[i], map.get(ch[i]) + 1);// 如果该字符出现的次数大于max,则将max设置为当前字符出现的次数,// 并将出现次数最多的字符置为当前字符if (map.get(ch[i]) >= max) {max = map.get(ch[i]);ret = ch[i];}} else {map.put(ch[i], 1);}}return ret;}public static void main(String[] args) {// 测试字符String str = "a1a2a3bbbcccdddeeefffddda23112211";char c = FirstChar.searchFirstChar(str);System.out.println(c);}}

执行结果:

【算法】大搜车——找出一个字符串中出现次数最多的字符 如果有多个出现次数相同的字符 那就找出最先出现的那个字符

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。