hdu 2087 剪花布条

来源:互联网 发布:魔域灵药详细数据 编辑:程序博客网 时间:2024/05/22 10:51

点击打开链接hdu2087


思路:kmp

分析:
1 题目要求的是给定一个文本串和给定一个模式串,求文本串中有几个模式串。
2 注意文本串为"aaaaaa",模式串"aa"的时候,ans = 3 而不是5。

代码:

#include<algorithm>#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAXN 1010int ans;char text[MAXN];char pattern[MAXN];int next[MAXN];/*求next数组*/void getNext(){   int m = strlen(pattern);   next[0] = next[1] = 0;   for(int i = 1 ; i < m ; i++){      int j = next[i];      while(j && pattern[j] != pattern[i])         j = next[j];      next[i+1] = pattern[i] == pattern[j] ? j+1 : 0;   }}/*匹配*/void find(){   ans = 0;   int m = strlen(pattern);   int n = strlen(text);   int j = 0;/*模式串的下标*/   for(int i = 0 ; i < n ; i++){      while(j && pattern[j] != text[i])         j = next[j];      if(pattern[j] == text[i])         j++;      if(j == m){         ans++;         j = 0;/*这个地方注意防止出现输入aaaaaa aa 输出5的情况*/      }   }   printf("%d\n" , ans);}int main(){   while(1){      scanf("%s" , text);      if(!strcmp(text , "#"))         break;      scanf("%s" , pattern);      getNext();      find();   }   return 0;}



原创粉丝点击