回答
Boyer-Moore会是计算出现次数的好选择,因为它有一些开销,你只需要做一次。模式字符串越长越好,因此对于“one”它不是一个好的选择。
如果要计算重叠,请在上一次匹配后开始下一个搜索一个字符。如果您想忽略重叠,请在上一次匹配之后开始下一个搜索完整模式字符串长度。
如果你的语言有一个indexOf或strpos方法来查找另一个字符串,你可以使用它。如果它证明变慢了,那么选择一个更好的算法。
Hellnar, 您可以使用一个简单的字典来计算字符串中的出现次数。该算法是一种计数算法,这里有一个例子:
"""
The counting algorithm is used to count the occurences of a character
in a string. This allows you to compare anagrams and strings themselves.
ex. animal, lamina a=2,n=1,i=1,m=1
"""
def count_occurences(str):
occurences = {}
for char in str:
if char in occurences:
occurences[char] = occurences[char] + 1
else:
occurences[char] = 1
return occurences
def is_matched(s1,s2):
matched = True
s1_count_table = count_occurences(s1)
for char in s2:
if char in s1_count_table and s1_count_table[char]>0:
s1_count_table[char] -= 1
else:
matched = False
break
return matched
#counting.is_matched("animal","laminar")
这个例子只是返回True或False如果字符串匹配。请记住,该算法计算字符在字符串中出现的次数,这对字符串非常有用。
这不能正确解决问题。首先,它只报告真/假而不是一些匹配,这是OP要求的。如果您要搜索大型文本语料库(比如说纽约时报)以查找某个字符串的所有事件,那么您几乎肯定会对任何字符串都有误报,因为您的算法只是检查字符串的字母是否出现在某处在源文本中。 – templatetypedef 2011-08-26 17:59:44
对于初学者来说,是的,你可以非常有效地用Boyer-Moore来完成。但是,根据问题的其他参数,可能会有更好的解决方案。
The Aho-Corasick string matching algorithm会发现一个的所有出现设定在目标串图案串的和在时间为O这样做(M + N + Z),其中m是串的长度,以搜寻中,n是要匹配的所有模式的总长度,z是产生的匹配总数。如果您只有一个字符串匹配,则这与源字符串和目标字符串的大小呈线性关系。它也会发现相同字符串的重叠事件。此外,如果您想检查某个源字符串中出现一组字符串的次数,则只需要对该算法进行一次调用即可。最重要的是,如果您想要搜索的字符串集合永不改变,您可以将O(n)工作作为预处理时间,然后查找O(m + z)中的所有匹配项。
如果,另一方面,你有一个源字符串和一组子搜索的快速变化,您可能需要使用suffix tree。对于要搜索的字符串,O(m)预处理时间可以在每个子字符串的O(n)时间内检查字符串中出现长度为n的特定子字符串的次数。
最后,如果你正在寻找的东西,你可以很容易地和以最小的麻烦的代码,你可能要考虑寻找到Rabin-Karp算法,它采用了罗林哈希函数查找字符串。这可以用大约10到15行代码进行编码,没有预处理时间,对于普通文本字符串(大量文本很少匹配)可以很快找到所有匹配。
希望这会有所帮助!
- 1. 如何计算某个字符串内发生的次数?
- 2. 计算字符串中的字符数
- 3. 替换字符串中的字符串和计数字符串的发生
- 4. Java方法来计算字符串的字符数
- 5. 计算字符串中的字数?
- 6. Javascript计算字符串中的数字
- 7. 计算字符串输入的字数
- 8. 计算器为Java中的计算方法生成空字符串错误
- 9. 字符串发生
- 10. 发生字符串
- 11. 简单的方法来计算字符串的发生和按它们排序
- 12. 计算用户生成的字符串中的特殊字符
- 13. PHP字符串计算
- 14. 首先-发生并行字符串匹配算法
- 15. 计算字符串中字符串的数量?
- 16. 计算字符串中的位数
- 17. 计算不同字符串的数量?
- 18. 计算字符串中的句子数
- 19. 计算字符串中的点数
- 20. 计算字符串中的字符
- 21. 如何从文本文件中计算字符串中字符串的发生次数 - python
- 22. 字符串数字发生器
- 23. 按顺序计算字符的发生次数
- 24. 在文本文件中计算字符的发生次数
- 25. 优雅的方法来计算字符串中的字母数字字符?
- 26. Java计数从字符串中发生字符的次数是多少次
- 27. 创建函数来计算字符串中的字符数
- 28. 如何计算数字和数学运算符的数组(或字符串)
- 29. 字符串中的子串计算
- 30. 正则表达式列表和计数字符串发生
如果您要搜索的字符串是“aa”,而您的文本是“aaaa”,那么这是否会计为两到三次出现? – tloflin 2010-05-04 18:44:56
不,这不是一个是或否的问题:它是两个还是三个? – tloflin 2010-05-04 18:51:40
哦,对不起,我会用我的确切关键字来计算人类输入内容的发生,因此它确实无关紧要,因为它的发生会非常低,甚至发生,它并不重要。 – Hellnar 2010-05-04 18:55:53