【问题标题】:Count occurrences of each unique character计算每个唯一字符的出现次数
【发布时间】:2010-11-06 05:49:30
【问题描述】:

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

【问题讨论】:

  • 家庭作业?告诉我们你做了什么。
  • 如何找到您已经完成的工作?您可以先尝试解决自己的问题,然后再针对您遇到的问题提出问题。请发表你所做的,谢谢。
  • @Bert F 我的解决方案类似于@zengr,我想知道是否有更好的方法,所以我在这里发布问题。

标签: java string


【解决方案1】:

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

需要做什么?

让我们使用以下字符串:

it is nice and sunny today.

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

  1. 遍历字符串的每个字符
  2. 记录字符串中每个字符出现的次数

我们将如何实际尝试?

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

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

'i'  ->  1

其次,我们又找到了一个新字符t,所以我们可以把它加到上表中:

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

第三个,空格,再重复一遍……

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

第四,我们遇到了一个i,它恰好已经存在于表中。因此,我们要检索现有计数,并将其替换为现有计数 + 1:

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

等等。

如何翻译成代码?

将上面的代码翻译成代码,我们可以这样写:

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

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

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

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

祝你好运!

【讨论】:

  • 谢谢! :) (ack, 15 个字符的过滤器...)
  • 谢谢你的好话 :)
【解决方案2】:

这是作业,所以无法发布代码,但这是一种方法:

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

【讨论】:

  • 谢谢 :-),其实是我前几天回答的面试题,你的回答跟我差不多。我在这里发布问题是因为我想知道其他程序员对此有何想法。
  • 我猜 hashmap 是这个问题的最佳答案。
【解决方案3】:
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);       
    }
}

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 2020-03-07
    • 2012-10-25
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多