计算每个唯一字符的出现次数

时间:2010-11-06 05:49:30

标签: java string

如何查找String中每个唯一字符的出现次数?您最多可以使用一个循环。请发布您的解决方案,谢谢。

3 个答案:

答案 0 :(得分:12)

由于这听起来像是一个家庭作业问题,让我们试着用手去解决这个问题。一旦我们这样做,让我们看看我们如何尝试在代码中实现它。

需要做什么?

我们采取以下字符串:

it is nice and sunny today.

为了计算每个字符出现在上述字符串中的次数,我们应该:

  1. 迭代字符串的每个字符
  2. 记录字符串中每个字符显示的次数
  3. 我们如何实际尝试?

    手动执行此操作可能是这样的:

    首先,我们找到了一个新的追踪者i,所以我们可以在表格中注意到i到目前为止出现了一次:

    'i'  ->  1
    

    其次,我们找到另一个新角色t,所以我们可以在上表中添加:

    'i'  ->  1
    't'  ->  1
    

    第三,空格,再重复一次......

    'i'  ->  1
    't'  ->  1
    ' '  ->  1
    

    第四,我们遇到的i恰好存在于表中。因此,我们希望检索现有的计数,并将其替换为现有的计数+ 1:

    'i'  ->  2
    't'  ->  1
    ' '  ->  1
    

    等等。

    如何翻译成代码?

    将上述内容翻译成代码,我们可能会这样写:

    • 对于字符串中的每个字符
      • 检查是否已遇到该角色
        • 如果不是,那么请记住新角色并说我们遇到过一次
        • 如果是,则取其遇到的次数,并将其递增一次

    对于实现,正如其他人所提到的,使用循环和Map可以实现所需。

    循环(例如forwhile循环)可用于迭代字符串中的字符。

    Map (例如HashMap)可用于跟踪角色出现的次数。在这种情况下,将是字符,将是字符出现次数的计数。

    祝你好运!

答案 1 :(得分:5)

这是一个功课,所以不能发布代码,但这是一种方法:

  1. 遍历字符串,char by char。
  2. 将char放入hashmap键并将其值初始化为1(count)。现在,如果再次遇到char,请更新值(count + 1)。否则将新char添加到key并再次设置其值(count = 1)

答案 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);       
    }
}