按顺序计算字符的出现次数

时间:2016-07-07 08:24:29

标签: java

我希望找到每个字符的增加顺序。

例如。对于输入abcddec输出应为a1b1c1d1d2e1c2,但我的 代码输出为a1b1c2d2e1c2

我应该做些什么改变?

package com.Java8;

public class Occurences {

    public static void main(String[] args) {

        String str = "abb";
        char[] arr = str.toCharArray();
        String result = "";
        for (int i = 0; i < arr.length; i++) {
            int count = 0;
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    count++;
                }
            }
            result = result + arr[i] + count;
        }
        System.out.println(result);
    }
}

5 个答案:

答案 0 :(得分:1)

undefined

我更喜欢创建一些计数器状态持有者并避免双FOR循环。在循环中使用字符串连接也不是一个好习惯,使用StringBuilder会更好。

答案 1 :(得分:1)

避免双重。将状态存储在地图或其他内容中:

    String str="abbcece";
    char []charArray=str.toCharArray();
    StringBuilder result = new StringBuilder();
    Map<Character, Integer> occurenceMap = new HashMap<Character, Integer>();
    for(Character character:charArray){
        Integer occ = 1;
        if(occurenceMap.containsKey(character)){
            occ =  occurenceMap.get(character)+1;
        }
        occurenceMap.put(character, occ);
        result.append(character).append(occ);
    }

    System.out.println(result.toString());

答案 2 :(得分:0)

每次字符出现在字符串中时,计数技术都会计数,而不是每次字符出现在字符串+ 1之前。您需要将for循环更改为以下内容:

for (int i = 0; i < arr.length; i ++){
    int count = 1;
    for (int j = 0; j < i; j ++){
        if(arr[i] == arr[j]){
            count ++;           
        }
    }
    result = result + arr[i] + count;
}

这会迭代for循环中字符前的每个字符并检查它们是否相等

答案 3 :(得分:0)

你的内循环上限应该小于&#39; i&#39;。

public class Occurences {
    public static void main(String[] args) {
        String str = "abb";
        char[] arr = str.toCharArray();
        String result = "";
        for (int i = 0; i < arr.length; i++) {
            int count = 1;
            for (int j = 0; j < i; j++) { //j upper limit should be i
                if (arr[i] == arr[j]) {
                    count++;
                }
            }
            result = result + arr[i] + count;
        }
        System.out.println(result);
    }
}

答案 4 :(得分:0)

您可以使用地图来计算每个字母的出现次数:

public static void main(String[] args){
    String s = "abcddec"; 
    Map<Character, Integer> mapCount = new HashMap<>();
    StringBuilder sb = new StringBuilder();

    for (char c : s.toCharArray()){
        if(mapCount.containsKey(c)){
            mapCount.put(c, mapCount.get(c) +1);
        }
        else mapCount.put(c, 1);
        sb.append(String.valueOf(c) + mapCount.get(c));
    }
    System.out.println(sb.toString());
}

解决方案的时间复杂度为 O(N)