日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模式串匹配,kmp

發布時間:2024/4/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模式串匹配,kmp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <stdio.h> #include <stdlib.h> #include <string> #include<string.h> #define MAXSTRLEN 255 /* 可以在255以內定義最大串長 */ typedef char SString[MAXSTRLEN + 1]; /* 0號單元存放串的長度 */ void get_next(SString T, int next[]); void get_nextval(SString T, int nextval[]); int Index(SString S, SString T, int pos) {int i = pos; int j = 1;while (i <= S[0] && j <= T[0]) {if (S[i] == T[j]) {++i; ++j;} //繼續比較后繼字符else {i = i - j + 2; j = 1;} //指針后退重新開始匹配 }if (j > T[0]) return i - T[0];else return 0; }int Index_KMP_1(SString S, SString T, int pos) {int i = pos; int j = 1;int *next = (int *)malloc((T[0] + 1) * sizeof(int));get_next(T, next);while (i <= S[0] && j <= T[0]) {if (j == 0 || S[i] == T[j]) {++i; ++j;} //繼續比較后繼字符else j = next[j]; //模式串向右移動 }free(next);if (j > T[0]) return i - T[0]; //匹配成功else return 0; }void get_next(SString T, int next[]) {int i = 1, j = 0; next[1] = 0;while (i < T[0]) {if (j == 0 || T[i] == T[j]) {++i; ++j; next[i] = j;}else j = next[j];} }int Index_KMP_2(SString S, SString T, int pos) {int i = pos; int j = 1;int *nextval = (int *)malloc((T[0] + 1) * sizeof(int));get_nextval(T, nextval);while (i <= S[0] && j <= T[0]) {if (j == 0 || S[i] == T[j]) {++i; ++j;} //繼續比較后繼字符else j = nextval[j]; //模式串向右移動 }free(nextval);if (j > T[0]) return i - T[0]; //匹配成功else return 0; }void get_nextval(SString T, int nextval[]) {int i = 1; nextval[1] = 0; int j = 0;while (i < T[0]) {if (j == 0 || T[i] == T[j]) {++i; ++j;if (T[i] != T[j]) nextval[i] = j;else nextval[i] = nextval[j];}else j = nextval[j];} } /* 樣例 s:ababcabcacbabt:abcac */ int main(){SString S, T;scanf("%s",S+1);S[0]=strlen(S+1);S[S[0]+1]='\0';scanf("%s",T+1);T[0]=strlen(T+1);T[T[0]+1]='\0';printf("Index: %d\n", Index(S, T, 1));//暴力模式匹配方法printf("Index_KMP_1: %d\n", Index_KMP_1(S, T, 1));//KMP算法printf("Index_KMP_2: %d\n", Index_KMP_2(S, T, 1));//KMP優化算法 }

?

轉載于:https://www.cnblogs.com/13224ACMer/p/5037883.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的模式串匹配,kmp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。