计算字符串中非重叠事件的数量

时间:2015-02-19 22:05:43

标签: java string

您好我正在尝试解决一个问题,即我计算字符串s1中字符串s2的非重叠出现次数。示例String s1 = "abab"String s2 = "ab"出现次数为2.另一个示例String s1 = "aaabbaa"String s2 = "aa"出现次数为2.最后一个示例String s1 = "aabbaa"和{{ 1}}出现次数等于0。 我该如何解决这个问题?

思想: 我知道我是否匹配s1中的String s2。我通过添加当前索引位置和s2.length来移动到下一个位置,如果它们不相等,则将当前索引位置增加1.我的问题不知道如何开始?你会如何使用迭代来解决这个问题。谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我希望这是不言自明的(使用String.indexOf):

public int countOccurrences(String haystack, String needle) {
  int count = 0, offset = 0, index;
  // As long as there is another occurrence...
  while((index = haystack.indexOf(needle, offset)) != -1) {
    // Skip already matched parts the next time
    offset = index + needle.length();
    // Increment counter
    count++;
  }
  return count;
}

编辑: @JennFitz请求了一个递归版本,所以这里是(虽然上面的方法要好得多):

public int countOccurrences(String haystack, String needle) {
  int index = haystack.indexOf(needle);
  if(index == -1) return 0;
  int offset = index + needle.length();
  return 1 + countOccurrences(haystack.substring(offset), needle);
}