Java 请查找下面的代码来计算给定字符串中的字符数。我想知道我的方法是正确的还是最好的方法是什么? 公共字符串getCharCntStr(字符串inputStr){ List alreadyCntChrs=new ArrayList();//存储已计数的字符 StringBuilder outputStr=新建StringBuilder(); 对于(inti=0;i

Java 请查找下面的代码来计算给定字符串中的字符数。我想知道我的方法是正确的还是最好的方法是什么? 公共字符串getCharCntStr(字符串inputStr){ List alreadyCntChrs=new ArrayList();//存储已计数的字符 StringBuilder outputStr=新建StringBuilder(); 对于(inti=0;i,java,string,Java,String,来说,您的代码很好,但我所实现的将给您一些修改 public String getCharCntStr(String inputStr){ List<Character> alreadyCntChrs=new ArrayList<>();//store already counted chars StringBuilder outputStr=new StringBuilder(); for(int i=0;i<inp

来说,您的代码很好,但我所实现的将给您一些修改

public String getCharCntStr(String inputStr){
        List<Character> alreadyCntChrs=new ArrayList<>();//store already counted chars
        StringBuilder outputStr=new StringBuilder();
        for(int i=0;i<inputStr.length();i++){
            char a=inputStr.charAt(i);
            if(alreadyCntChrs.contains(a)){
                continue;
            }
            int count=0;
            for(int j=i;i<inputStr.length();j++){// to find count of a char in string
                if(a==inputStr.charAt(j))
                    count++;
            }
            outputStr.append(a).append(count);
            alreadyCntChrs.add(a);
        }
        return outputStr.toString();
    }
静态无效字符计数(字符串输入字符串){
//创建一个HashMap,其中包含char作为键和引用作为值
HashMap charCountMap=新HashMap();
//将给定字符串转换为字符数组
char[]strArray=inputString.toCharArray();
//检查strArray的每个字符
用于(字符c:strArray){
if(charCountMap.containsKey(c)){
//如果charCountMap中存在char,则将其计数增加1
charCountMap.put(c,charCountMap.get(c)+1);
}否则{
//如果charCountMap中不存在char,
//将此字符放入charCountMap,值为1
charCountMap.put(c,1);
}
}
//打印charCountMap
System.out.println(charCountMap);
}

感谢和问候。

使用forEach循环可以使代码更加清晰:

 static void characterCount(String inputString) {
        //Creating a HashMap containing char as a key and occurrences as  a value
        HashMap<Character, Integer> charCountMap = new HashMap<Character, Integer>();
        //Converting given string to char array
        char[] strArray = inputString.toCharArray();
        //checking each char of strArray
        for (char c : strArray) {
            if (charCountMap.containsKey(c)) {
                //If char is present in charCountMap, incrementing it's count by 1
                charCountMap.put(c, charCountMap.get(c) + 1);
            } else {
                //If char is not present in charCountMap,
                //putting this char to charCountMap with 1 as it's value
                charCountMap.put(c, 1);
            }
        }
        //Printing the charCountMap
        System.out.println(charCountMap);
    }
使用
HashMap
进行重复计数
O(n)
,n=字符串长度;您的代码当前是cuadratic
O(n^2)
。但是,
HashMap
不保证任何排序。使用
LinkedHashMap
可以保证排序,但性能会受到轻微的损失,这不会影响渐进排序(大o)性能

因此,fast,
O(n)
代码可以是:

for (char c : input.toCharArray())
公共静态字符串charCountsInString(字符串输入){
//计算保留顺序的哈希映射中的字符重复次数
映射计数=新建LinkedHashMap();
for(char c:input.toCharArray()){
counts.put(c,counts.getOrDefault(c,0)+1);
}
//按顺序输出字符及其重复计数
StringBuilder输出=新的StringBuilder();
对于(Map.Entry e:counts.entrySet()){
append(e.getKey()).append(e.getValue());
}
返回output.toString();
}

你知道什么是hashmap吗?是的,我们可以创建char和count键值对。在这个对中,我们必须检查每个char的containsKey。IMO最简单的方法就是迭代字符串中的每个字符并使用hashmap进行计数。我想了解这两种方法的O表示法。请帮助我们需要输出:s2a3n1u1l2h3i1k1。表示字符数应该按顺序排列。我们可以用HashMap来做吗?谢谢!!谢谢你的帮助..我不知道getOrDefault()方法。
public static String charCountsInString(String input) {
    // count character repetitions in a hashmap that preserves ordering
    Map<Character, Integer> counts = new LinkedHashMap<>();
    for (char c : input.toCharArray()) {
        counts.put(c, counts.getOrDefault(c, 0)+1);
    }

    // output characters in order, with their repetition counts
    StringBuilder output = new StringBuilder();
    for (Map.Entry<Character, Integer> e : counts.entrySet()) {
        output.append(e.getKey()).append(e.getValue());
    }
    return output.toString();
}