一道简单的关于容器使用的笔试题,思路很简单,但是有的方法真的是不用不知道。
思路:
(1)用HashMap 装,key放字符,value放统计数值
(2)预防有的字符出现次数一样,返回值也要用map装
(3)同一批的统计数值一样的字符,在发现比他们更大的出现次数的字符时,必须全部清除掉。
(4)默认第一个就是最大的,然后开始比较。
(5)整个过程分三步:1把String拆成 char[] 。 2循环char[],统计出每个字符出现的次数。 3利用迭代器模式,循环输出全部的map里面的元素,并且根据value比较大小。
// 传入一个字符串,统计每个字符出现的个数,并选出最多的那一个@RequestMapping("/countChar")public Map countChar(){String a = "abbbbcdaaa";char [] strArr = a.toCharArray();Map<Character,Integer> countMap = new HashMap<Character,Integer>();Map<Character,Integer> bigMap = new HashMap<Character,Integer>();for (int i = 0; i < strArr.length; i++) {// 首先判断map中是否有这个字符,没有的话新增,有的话value+1。if(countMap.get(strArr[i]) == null){// 找不到就是空,设置value为1countMap.put(strArr[i], 1);} else {// 找到了就value值+1countMap.put(strArr[i], countMap.get(strArr[i])+1);}}Integer MaxValue = 0;// 循环找出value值最大的key,就是出现最多的字符(注意可能有多个出现次数相同)Iterator<Map.Entry<Character,Integer>> iterator = countMap.entrySet().iterator();while (iterator.hasNext()){Map.Entry entry = iterator.next();Character NowChars = (Character) entry.getKey();Integer NowValue = (Integer) entry.getValue();if(bigMap.isEmpty()){// 如果是空的,则把第一个当最大的放进去bigMap.put(NowChars,NowValue);MaxValue = NowValue;} else {// 不是空,则拿value出来比较if(NowValue> MaxValue){// 如果当前循环的数值大于定义中的最大,清空原来的map表, 再把新的放进去。bigMap.clear();bigMap.put(NowChars,NowValue);} else if(NowValue == MaxValue){// 统计数值相等,不清空map,直接放入bigMap.put(NowChars,NowValue);} else {}}}return bigMap;}
后续有更好的更简便的优化方法再写上来~
如果觉得《Java统计字符串中出现次数最多的的英文字母》对你有帮助,请点赞、收藏,并留下你的观点哦!