文字列の一般的な処理方法
1569 ワード
, 。 kmp , , , for , , , , 。
? kmp , next , 。next , 。 。
http://kb.cnblogs.com/page/176818/次はコード実装
// next ,
void getnext(char *str,int len,int next[]){
int index=1,n =0 ;//n count the next[]
next[0] = 0;
for (index = 1;index0 && str[index] != str[n])
n = next[n-1];
if(str[index] == str[n])
n++;
next[index] = n;
}
}
bool kmp(char *src, char *str,int lena,int lenb)
{
int next[len];
int j=0;
getnext(str,lena,next);
for(int i=0;i0 && src[i] != str[j])
j = next[j-1];
if (str[j] == src[i])
j++;
if (j == lena){
cout<
bool cmp(string str1,string str2)
{
return str1+str2>str1+str2
}
1つの文字列と別の文字列を比較するのではなく、2つのリンクを比較します.
bool check(string str1,string str2){
string str3 = str1+str1;
return kmp(str2,str3);// kmp
}
他の文字列テクニックについては、続きます~~