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

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

2个回答

感觉这个时间复杂度和空间复杂度比较不好,暂时没有想到怎么优化或者好的想法,再看看有没有好的实现方法,不过这个功能按照你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;
    }


你可以每取出一个字,判断能不能转换成数字,如果可以先存起来,如果下一个也可以,就把前面的加上。以此循环就可以了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐