如何查找String中每个唯一字符的出现次数?您最多可以使用一个循环。请发布您的解决方案,谢谢。
答案 0 :(得分:12)
由于这听起来像是一个家庭作业问题,让我们试着用手去解决这个问题。一旦我们这样做,让我们看看我们如何尝试在代码中实现它。
需要做什么?
我们采取以下字符串:
it is nice and sunny today.
为了计算每个字符出现在上述字符串中的次数,我们应该:
我们如何实际尝试?
手动执行此操作可能是这样的:
首先,我们找到了一个新的追踪者i
,所以我们可以在表格中注意到i
到目前为止出现了一次:
'i' -> 1
其次,我们找到另一个新角色t
,所以我们可以在上表中添加:
'i' -> 1
't' -> 1
第三,空格,再重复一次......
'i' -> 1
't' -> 1
' ' -> 1
第四,我们遇到的i
恰好存在于表中。因此,我们希望检索现有的计数,并将其替换为现有的计数+ 1:
'i' -> 2
't' -> 1
' ' -> 1
等等。
如何翻译成代码?
将上述内容翻译成代码,我们可能会这样写:
对于实现,正如其他人所提到的,使用循环和Map
可以实现所需。
循环(例如for
或while
循环)可用于迭代字符串中的字符。
Map
(例如HashMap
)可用于跟踪角色出现的次数。在这种情况下,键将是字符,值将是字符出现次数的计数。
答案 1 :(得分:5)
这是一个功课,所以不能发布代码,但这是一种方法:
答案 2 :(得分:0)
Here you go! I have done a rough program on Count occurrences of each unique character
public class CountUniqueChars{
public static void main(String args[]){
HashMap<Character, Integer> map;
ArrayList<HashMap<Character, Integer>> list = new ArrayList<HashMap<Character,Integer>>();
int i;
int x = 0;
Boolean fire = false;
String str = "Hello world";
str = str.replaceAll("\\s", "").toLowerCase();
System.out.println(str.length());
for(i=0; i<str.length() ; i++){
if(list.size() <= 0){
map = new HashMap<Character, Integer>();
map.put(str.charAt(i), 1);
list.add(map);
}else{
map = new HashMap<Character, Integer>();
map.put(str.charAt(i), 1);
fire = false;
for (HashMap<Character, Integer> t : list){
if(t.containsKey(str.charAt(i)) == map.containsKey(str.charAt(i))){
x = list.indexOf(t);
fire = true;
map.put(str.charAt(i), t.get(str.charAt(i))+1);
}
}
if(fire){
list.remove(x);
}
list.add(map);
}
}
System.out.println(list);
}
}