KMP算法
//target指代目标索引
//patten指代模板索引
#include<iostream>
#include<string>
using namespace std;
int match(const string& target,const string& pattern)
{
int target_length = target.size();
int pattern_length = pattern.size();
int target_index = 0;
int pattern_index = 0;
while(target_index < target_length && pattern_index < pattern_length)
{
if(target[target_index]==pattern[pattern_index])
{
++target_index;
++pattern_index;
}
else
{
target_index -= (pattern_index-1);
//target_index=target_index-patten_index+1 修改target_index 指代位置,并且指向下一位置
pattern_index = 0;
}
}
if(pattern_index == pattern_length)
{
return target_index - pattern_length; //修改位置,但不指向下一位置
}
else
{
return -1;
}
}
int main()
{
cout<<match("banananobano","nano")<<endl;
return 0;
}
补充:综合编程 , 安全编程 ,