例如,如果字符串输入为:duplicate
的输出应为"aabacdceefeg"
,我试图在字符串中打印a-->3,b-->1,c--->2,e-->3
字符,就像这种方式必须打印值,但下面的代码不起作用这种逻辑可以有人建议我
public class Test {
public static void main(String[] args) {
String string1 = "Great responsibility";
char string[] = string1.toCharArray();
HashMap<Character, Integer> hashMap = new HashMap<Character, Integer>();
for (int i = 0; i < string.length; i++) {
for (int j = i + 1; j < string.length; j++) {
if (string[i] == string[j]) {
Integer value = hashMap.get(string[i]);
hashMap.put(string[i], value+1);
} else {
hashMap.put(string[i], 1);
}
}
}
System.out.println(hashMap);
}
}
答案 0 :(得分:1)
您可以通过直接使用hashMap并仅使用一个循环来简化它
String string1 = "Great responsibility";
HashMap<Character, Integer> hashMap = new HashMap<Character, Integer>();
for (Character c : string1.toCharArray()) {
if (hashMap.containsKey(c)) {
int val = hashMap.get(c);
hashMap.put(c, val + 1);
}
else {
hashMap.put(c, 1);
}
}
System.out.println(hashMap);
输出
{ =1, a=1, b=1, e=2, G=1, i=3, l=1, n=1, o=1, p=1, r=2, s=2, t=2, y=1}
答案 1 :(得分:1)
如何优化解决方案有很多答案,但是没有任何一个方法可以说明如何修复原始的[key1,value1,value2]
时间复杂度解决方案。
这是原始解决方案中要解决的问题(除了效率低下外)
O(N^2)
设置为value
,因为这是第一次出现。固定代码如下:
1
答案 2 :(得分:0)
您只需要一级循环:
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < string.length; i++) {
Integer count = map.get(string[i]);
if (count == null) {
map .put(string[i], 1);
} else {
map .put(string[i], count+1);
}
}
答案 3 :(得分:0)
首先创建一个字符列表,然后遍历所需的字符串。
ArrayList<Character> charList=new ArrayList();
charList.clear();
for (int i = 0; i < string.length; i++) {
if(!charList.Contains(string[i])){
charList.add(string[i]))
}
}
HashMap<Character, Integer> hashMap = new HashMap<Character, Integer>();
for (Char char:charList) {
count=0;
for (int j = i + 1; j < string.length; j++) {
if (char == string[j]) {
hashMap.put(char, count++);
}
}
}
System.out.println(hashMap);
}
答案 4 :(得分:0)
String string1 = "Great responsibility";
char[] chars = string1.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for(char c : chars)
{
if(map.containsKey(c)) {
int counter = map.get(c);
map.put(c, ++counter);
} else {
map.put(c, 1);
}
}
我希望它能对您有所帮助。
答案 5 :(得分:0)
您还可以使用 Java8 lambda函数来解决该问题。您只需将String转换为count映射即可。
String string1 = "aabacdceefeg";
Map<Character,Long> countMap = string1.chars().mapToObj(i -> (char)i).collect(
Collectors.groupingBy(Function.identity(), Collectors.counting())
);
System.out.println(countMap);