您好我正在尝试解决一个问题,即我计算字符串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.我的问题不知道如何开始?你会如何使用迭代来解决这个问题。谢谢您的帮助。
答案 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);
}