【HDOJ】1686 Oulipo

本文深入探讨了KMP算法的原理与应用,通过代码实现展示了如何高效匹配字符串,包括预处理函数getnext和主匹配函数kmp。适用于字符串搜索与匹配领域的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kmp算法。

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 char src[10005], des[1000005];
 5 int next[10005], total;
 6 
 7 void kmp(char des[], char src[]){
 8     int ld = strlen(des);
 9     int ls = strlen(src);
10     int i, j;
11 
12     total = i = j = 0;
13     while (i < ld) {
14         if (des[i] == src[j]) {
15             ++i;
16             ++j;
17         } else {
18             j = next[j];
19             if (j == -1) {
20                 j = 0;
21                 ++i;
22             }
23         }
24         if (j == ls) {
25             ++total;
26             j = next[j];
27         }
28     }
29 }
30 
31 void getnext(char src[]) {
32     int i=0, j = -1;
33     next[0] = -1;
34     while (i < strlen(src)) {
35         if (j==-1 || src[i]==src[j]) {
36             ++i;
37             ++j;
38             next[i] = j;
39         } else {
40             j = next[j];
41         }
42     }
43 }
44 
45 int main() {
46     int n;
47 
48     scanf("%d", &n);
49     while (n--) {
50         scanf("%s",src);
51         scanf("%s",des);
52         getnext(src);
53         kmp(des, src);
54         printf("%d\n", total);
55     }
56 
57     return 0;
58 }

 

转载于:https://www.cnblogs.com/bombe1013/p/3777565.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值