@lawk97
        
        2017-05-27T02:30:32.000000Z
        字数 1787
        阅读 1203
    字符串
[HDU - 168]
#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <string>#include <map>#include <stack>#include <queue>using namespace std;int t,ans,Next[10005];char w[10005],te[1000005];void getNext(){int len=strlen(w),j=0;Next[0]=Next[1]=0;for (int i = 1; i < len; ++i){while(j>0&&w[i]!=w[j]){j=Next[j];}if (w[i]==w[j]){j++;}Next[i+1]=j;}}void search(){int j=0,lent=strlen(te),lenw=strlen(w);for (int i = 0; i < lent; ++i){while(j>0&&te[i]!=w[j]){j=Next[j];}if (te[i]==w[j]){j++;}if (j==lenw){ans++;j=Next[j];}}}int main(){scanf("%d",&t);while(t--){ans=0;scanf("%s%s",w,te);getNext();search();printf("%d\n",ans );}return 0;}
[HDU - 1251]
#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <string>#include <map>#include <stack>#include <queue>using namespace std;#define M 26int num;char t[15],w;struct tree{tree *next[M];int v;}*root;void create(char *str,int len){//int len=strlen(str);tree *p=root,*q=NULL;for (int i = 0; i < len; ++i){int id=str[i]-'a';if (p->next[id]==NULL){q=(tree *)malloc(sizeof(tree));for (int j = 0; j < M; ++j){q->next[j]=NULL;}q->v=1;p->next[id]=q;p=p->next[id];}else{p=p->next[id];p->v++;}}//p-v=-1;}int search(char *str,int len){//int len=strlen(str);tree *p=root;for (int i = 0; i < len; ++i){int id=str[i]-'a';p=p->next[id];if (p==NULL){return 0;}}return p->v;}int main(){num=0;root=(tree *)malloc(sizeof(tree));for (int i = 0; i < M; ++i){root->next[i]=NULL;}while(1){w=getchar();if (w=='\n'){create(t,num);num=0;w=getchar();if (w=='\n'){break;}}t[num++]=w;}num=0;while(~scanf("%c",&w)){if (w=='\n'){printf("%d\n",search(t,num));num=0;continue;}t[num++]=w;}return 0;}