我希望找到每个字符的增加顺序。
例如。对于输入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);
}
}
答案 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)