暴力算法
int violence(char s1[], char s2[]){ // 暴力匹配
int s1Len = strlen(s1); // s1长度
int s2Len = strlen(s2); // s2长度
int i = 0; // 指向s1指针
int j = 0; // 指向s2指针
while(i < s1Len && j < s2Len){
if(s1[i] == s2[j]){ // 匹配到
i++;
j++;
}else{
i = i - j + 1;
j = 0;
}
if(j == s2Len){ // 匹配成功,找到位置
return i - j;
}
}
return -1; // 未找到
}
KMP算法(串的应用)
#include <stdio.h>
#include <string.h>
typedef struct{
char ch[105];
int length;
}SString;
void get_Next(SString t,int next[]){
int i=1;
next[1]=0;
int j=0;
while (i<t.length) {
if (j == 0||t.ch[i]==t.ch[j]) {
i++;
j++;
next[i]=j;
}else{
j=next[j];
}
}
return;
}
int Index_KMP(SString s,SString t,int next[]){
int i=1;
int j=1;
while ((i <= s.length) && (j <= t.length)){
if (j==0 || (s.ch[i - 1]==t.ch[j - 1])) {
i++;
j++;
}
else{
j=next[j];
}
}
if (j > t.length) {
return (i - t.length);
}
return -1;
}
int main() {
SString s;SString t;
// int i= 0;
// int j = 0;
scanf("%s",s.ch);
scanf("%s",t.ch);
s.length = strlen(s.ch);
t.length = strlen(t.ch);
// printf("%d",t.length);
// while((s.ch[i] = getchar())!= '\n'){
// s.length++;
// i++;
// }
// while((t.ch[j] = getchar())!= '\n'){
// t.length++;
// j++;
// }
// s.length--;
// t.length--;
int next[t.length + 5] = {};
get_Next(t,next);
int m=Index_KMP(s,t,next);
printf("%d",m);
return 0;
}