比如一个字符串"heLLo12WorL11d12",其中12出现的次数最多,所以输出结果是两个12相加,
结果是24。但是实际字符串是随机输入的,所以实际字符串的内容不能确定,如果是单个数字我会算,但是这种多位数怎么算啊,
求大神指教。能用Java语言解答是最好不过了,在此谢过。
求一个字符串中出现次数最多的数字之和?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答
- 唐宋xy 2019-08-18 21:43关注
感觉这个时间复杂度和空间复杂度比较不好,暂时没有想到怎么优化或者好的想法,再看看有没有好的实现方法,不过这个功能按照你i描述的应该差不多,可以测试一下看看
@Test public void strTest() { String str = "heLLo12WorL11d12"; Integer sum = statisticsNum(str); System.out.println(sum); } private Integer statisticsNum(String str) { Map<Character, Integer> map = new HashMap<Character,Integer>(); map.put('0', 0); map.put('1', 1); map.put('2', 2); map.put('3', 3); map.put('4', 4); map.put('5', 5); map.put('6', 6); map.put('7', 7); map.put('8', 8); map.put('9', 9); List<String> list = new ArrayList<>(); String oldNumStr = ""; for (int i = 0; i < str.length(); i++) { Integer value = map.get(str.charAt(i)); if(value == null) { if(!oldNumStr.equals("")) { list.add(oldNumStr); oldNumStr = ""; } continue; } oldNumStr += value; } // 最后一位元素如果还是数字,则添加到list中 if(!oldNumStr.equals("")) { list.add(oldNumStr); } Integer sum = same(list); return sum; } // 获取list中重复最多元素 并计算总和 public Integer same(List<String> list) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < list.size(); i++) { String key = list.get(i); Object old = map.get(key); if (old != null) { map.put(key, old + "," + (i + 1)); } else { map.put(key, "" + (i + 1)); } } int count = 0; String str = ""; Iterator<String> it = map.keySet().iterator(); while (it.hasNext()) { String key = it.next(); String value = String.valueOf(map.get(key)); if (value.indexOf(",") != -1) { if(value.split(",").length > count) { count = value.split(",").length; str= key; } } } System.out.println(str + " " + count); Integer sum = Integer.valueOf(str) * count; return sum; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器