博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1572
阅读量:5163 次
发布时间:2019-06-13

本文共 1634 字,大约阅读时间需要 5 分钟。

一道字符串替换的题目。

题意:给你2*n组字符串,一个是规则,一个是替换的结果。

 

字符串的题目,确实麻烦,有些细节不处理好就是wa。

这里我提供1组数据

intput

1

abcdef

a

abcdef

1

ab

 

ababab

output

a

<empty line>

 

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 7 int next[100][300]; 8 char rule[100][100],rep[100][300],ans[300],tmp[300]; 9 10 void makenext(int i) //kmp求next数组。 11 { 12 int q,k; 13 int m = strlen(rule[i]); 14 next[i][0] = 0; 15 for (q = 1,k = 0; q < m; ++q) 16 { 17 while(k > 0 && rule[i][q] != rule[i][k]) 18 k = next[i][k-1]; 19 if (rule[i][q] == rule[i][k]) 20 { 21 k++; 22 } 23 next[i][q] = k; 24 } 25 } 26 27 void clea() 28 { 29 memset(rule,0,sizeof(rule[0])); 30 memset(rep,0,sizeof(rep[0])); 31 memset(next,0,sizeof(next[0])); 32 memset(tmp,0,sizeof(tmp)); 33 memset(ans,0,sizeof(ans)); 34 } 35 36 int main() 37 { 38 int n; 39 while(scanf("%d",&n),n!=0) 40 { 41 clea(); 42 getchar(); 43 for(int i=0;i
0&&ans[j]!=rule[i][q]) 56 q=next[i][q-1]; 57 if(ans[j]==rule[i][q]) 58 q++; 59 if(len3==q) 60 { 61 memset(tmp,0,sizeof(tmp)); 62 for(int m=0;m<=len-len3+len2;m++) //替换。这里处理相对麻烦,尤其是等号的问题。 63 { 64 if(m<=j-q) tmp[m]=ans[m]; 65 else if(m<=j-q+len2){ 66 for(int p=0;p

转载于:https://www.cnblogs.com/Tree-dream/p/5598946.html

你可能感兴趣的文章
递归地删除目录
查看>>
排球计分软件功能(记分员计分功能)
查看>>
javascript数组去重
查看>>
Java中判断字符串是否为数字的方法
查看>>
NOIP2018初赛题解 提高组
查看>>
单调栈(待完善)
查看>>
CSS 选择器参考手册
查看>>
Android学习笔记一:初识Android
查看>>
2018年全国多校算法寒假训练营练习比赛(第四场)nowcoder
查看>>
常用模块
查看>>
FastDFS分布式存储服务器安装
查看>>
SpringSecurity——默认过滤器链
查看>>
TinyMCE插件:RESPONSIVE filemanager 9 图片自动添加水印
查看>>
ACM题目————Equations
查看>>
DP专题训练之HDU 1231 最大连续子序列
查看>>
花生摄影
查看>>
JSON 特殊字符
查看>>
LeetCode: Word Ladder II [127]
查看>>
递归的思想
查看>>
CF 500 B. New Year Permutation 并查集
查看>>