串的模式匹配
首先什么叫串的模式匹配?
设有两个串s和t,要在串s中找到与t相等的子串。通常将s称为目标串,t称为模式串,这种串的定位查找也称为模式匹配。
对于这个问题,常见的两种算法是BF算法和KMP算法。
Brute-Force 算法
Brute-Force(暴力)算法简称BF算法,也称简单匹配算法。基本思路是采用穷举的方法,一个一个字符进行匹配,如果以第i个字符开头的子串与t不相等,那么枚举第i+1字符开头的子串。
BF算法过程模拟:
i和j分别从第一位开始匹配:
直到匹配某一位失败(如果没有匹配到某一位失败,而字符串t匹配结束,说明找到匹配的子串)。
回溯到该子串初始位的下一位重新匹配:
代码如下:
int index(SqString s,SqString t){
int i=0,j=0;//i和j分别表示当前匹配到s和t的第几位字符
while (i<s.length && j<t.length){
if (s.data[i]==t.data[j]){
i++; j++;}//目标串和模式串的当前位相等,匹配下一位
else{
i=i-j+1; j=0;}//以第i(初始i)个字符开头的子串匹配失败,目标串回溯到i+1个字符,模式串回溯到第一位重新匹配
}if (j>=t.length) return(i-t.length