- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)