可能重复:
substring algorithm
给定两个字符串A和B,如何在A中找到B的第一个位置? 例如,A =“ab123cdefgcde”; B =“cde” 然后A中B的第一个位置是5.
有什么技巧可以解决这个问题,或者只是从头开始搜索A?
答案 0 :(得分:6)
你真的必须从头开始扫描A.
有很好的快速子串搜索算法,例如: http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm
还有一个标准函数strstr
:
strstr(A,B)
答案 1 :(得分:3)
答案 2 :(得分:1)
解决此问题的最佳方法是使用KMP算法:http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm
答案 3 :(得分:1)
“Trick”是算法的另一个词,我想。最着名的是Knuth-Morris-Pratt。
答案 4 :(得分:1)
您正在解决的问题是“确切的字符串匹配”问题。天真的解决方案在O(n ^ 2)时间运行,但你可以做得更好。解决这个问题的一些线性时间算法是Knuth-Morris-Pratt(KMP),Boyer-Moore和Apostolico-Giancarlo。解决它的另一种方法是构造一个有限状态自动机,当它看到模式字符串时进入接受状态。最好的解决方案是O(n),所有那些都有最坏的运行时间。你必须从一端到另一端扫描字符串;但是,有可能跳过一小部分人物(Boyer-Moore和Apostolico-Giancarlo将会这样做),因为一些不匹配可能意味着其他不匹配。
如果您需要自己编写代码,我建议您使用Knuth-Morris-Pratt算法,因为它比我提到的其他解决方案更直观,更容易实现。但是,大多数编程语言都有一个“indexOf”或“find”函数,可以为您解决这个问题。
答案 5 :(得分:0)
在C编程中,你有函数strstr来查找源中的子字符串位置 串。
答案 6 :(得分:0)
如果您有 big 字符串,并且您要搜索许多子字符串, 记住suffix array结构是件好事 基本上,您创建一个指针数组,然后对其进行排序 然后,您可以使用二进制搜索找到任何子字符串。