找到一个字符串的位置在另一个字符串
给定两个字符串,A和B,如何找到B在A中的第一位置?例如,A =“ab123cdefgcde”; B =“cde” 那么B在A中的第一个位置是5.
是否有任何技巧可以解决这个问题,或者只是从一开始就搜索A?
您正在解决的问题是“确切的字符串匹配”问题。天真的解决方案运行在O(n^2)时间,但你可以做得比这更好。解决这个问题的一些线性时间算法是Knuth-Morris-Pratt(KMP),Boyer-Moore和Apostolico-Giancarlo。解决它的另一种方法是构造一个有限状态自动机,当它看到模式字符串时进入接受状态。最好的解决方案是O(n),所有这些都有最糟糕的运行时间。你必须从一端扫描字符串到另一端;然而,可以跳过一部分字符(Boyer-Moore和Apostolico-Giancarlo会这样做),因为一些不匹配可能意味着其他不匹配。
如果您需要自己编写代码,我建议您使用Knuth-Morris-Pratt算法,因为它比我提到的其他解决方案更直观,更易于实现。尽管大多数编程语言都有一个“indexOf”或“find”函数,可以为你解决这个问题。
你真的必须从头开始扫描A.
有很好的快速子串搜索算法,例如, http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm
还有一个标准功能strstr
:
strstr(A,B)
或在C++的情况下'std :: string :: find'。 – 2010-03-03 08:51:44
在C编程,有功能的strstr找到源 字符串的子字符串的位置。
Duplicate:http://stackoverflow.com/questions/1261041/substring-algorithm – outis 2010-03-03 08:47:21