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=字符串长度;您的代码当前是cuadraticO(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();
}