等一哈莫慌嘛 2019-08-18 19:27 采纳率: 0%
浏览 332
已采纳

求一个字符串中出现次数最多的数字之和?

比如一个字符串"heLLo12WorL11d12",其中12出现的次数最多,所以输出结果是两个12相加,
结果是24。但是实际字符串是随机输入的,所以实际字符串的内容不能确定,如果是单个数字我会算,但是这种多位数怎么算啊,
求大神指教。能用Java语言解答是最好不过了,在此谢过。

  • 写回答

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;
        }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器