3

我有一个字符串数组,想计算任何单个字符串的出现次数。

我已经整理好了。(这是一个长数组,我想摆脱 O(n²) 循环)

这是我的代码.. 显然它在 ind.outOfB 中用完了。exc..原因很清楚,但我不知道如何解决..

for (int i = 0; i < patternsTest.length-1; i++) {
        int occ=1;
        String temp=patternsTest[i];
        while(temp.equals(patternsTest[i+1])){
            i++;
            occ++;
        }
    }
4

6 回答 6

11

这将是一个 HashMap 的好地方,键是 Word,值是它出现的次数。Map.containsKeyMap.get方法是非常快的恒定时间查找。

Map<String,Integer> map = new HashMap<String,Integer>();
for (int i = 0; i < patternsTest.length; i++) {
    String word=patternsTest[i];
    if (!map.containsKey(word)){
        map.put(word,1);
    } else {
        map.put(word, map.get(word) +1);
    }
}

作为一个附带好处,您甚至不需要事先排序!

于 2013-05-24T23:26:51.303 回答
4

您可以使用 Java HashMap:

Map<String, Integer> occurrenceOfStrings = new HashMap<String, Integer>();

for(String str: patternsTest)
{
    Integer currentValue = occurrenceOfStrings.get(str);
    if(currentValue == null)
        occurrenceOfStrings.put(str, 1);
    else
        occurrenceOfStrings.put(str, currentValue + 1);
}
于 2013-05-24T23:27:29.900 回答
0

这没有超出范围的索引:

String[] patternsTest = {"a", "b"};
for (int i = 0; i < patternsTest.length-1; i++) {
    int occ=1;
    String temp=patternsTest[i];
    while(temp.equals(patternsTest[i+1])){
        i++;
        occ++;
    }
}

您可以通过将数据更改为:

String[] patternsTest = {"a", "a"};
于 2013-05-24T23:28:32.250 回答
0

你可以试试地图,只有一个循环

Map<String, Integer> occurences = new HashMap<String, Integer>();
String currentString = patternsTest[0];
Integer count = 1;

for (int i = 1; i < patternsTest.length; i++) {
    if(currentString.equals(patternsTest[i]) {
        count++;
    } else {
        occurrences.put(currentString, count);
        currentString = patternsTest[i];
        count = 1;
    }
}
occurrences.put(currentString, count);
于 2013-05-24T23:31:29.187 回答
0

Guava Multiset解决方案(两行代码):

Multiset<String> multiset = HashMultiset.create();
multiset.addAll(Arrays.asList(patternsTest));

//Then you could do...
multiset.count("hello");//Return count the number of occurrences of "hello".

我们可以使用它来排序和未排序的数组。易于维护代码。

于 2013-05-25T00:19:23.380 回答
0

我的解决方案是:

public int cantOccurences(String pattern, String[] values){
  int count = 0;

  for (String s : values) {
    count +=  (s.replaceAll("[^".concat(pattern).concat("]"), "").length());
  }
return count;
}
于 2014-04-11T18:30:35.147 回答