字符串ACM模板.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
字符串ACM模板

字符串 KMP #includeiostream using namespace std; char t[10010],s[1000100]; int kmpNext[10010]; /* standard C code for KMP */ void preKmp(char *x, int m, int kmpNext[]) { int i, j; i = 0; j = kmpNext[0] = -1; while (i m) { while (j -1 x[i] != x[j]) { j = kmpNext[j]; } i++; j++; if (x[i] == x[j]) { kmpNext[i] = kmpNext[j]; } else { kmpNext[i] = j; } } } int KMP(char *x, int m, char *y, int n) { int i,j,tot=0; /* Preprocessing */ preKmp(x, m, kmpNext); /* Searching */ i = j = 0; while (j n) { while (i -1 x[i] != y[j]) { i = kmpNext[i]; } i++; j++; if (i = m) { //OUTPUT(j - i); /* found one, do next if required*/ tot++; i = kmpNext[i]; } } return tot; } int main() { int T; //freopen(in.txt,r,stdin); scanf(%d\n,T); while(T--) { gets(t); gets(s); printf(%d\n,KMP(t,strlen(t),s,strlen(s))); } return 0; } 通配符匹配 int wildcard(const char * pat, const char * str) { while(*str *pat) { if(*pat==?) { if(wildcard(pat+1, str+1)) return 1; str++; pat++; } else if(*pat==*) { while(*pat==*) pat++; if(!*pat) return 1; while(*str) { if(wildcard(pat, str)) return 1; str++; } return 0; } else { if(*pat!=*str) return 0; str++; pat++; } } if(*str!=0) return 0; while(*pat==*) pat++; return !*pat; } 最小表示法 说把一个长为len的字符串围成一个圈,然后从任意一个字符作为起点顺时针转,都会产生一个新的长为len字符串,现在要求所有的可以产生的字符串中字典序最小的那个。下面这个函数就是解决这个问题的,返回值即为从原串中这个位置起产生的串就是字典序最小的。 int MinimumRepresentation(char *s, int l) { int i = 0, j = 1, k = 0, t; while (i l j l k l) { t = s[(i + k)%l] - s[(j + k)%l]; if (!t) ++ k; else {

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档