编写算法,从串s中删除所有和串t相同的子串。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据在第一行中输入不超过80个字符的字符串s,在第二行中输入不超过80个字符的字符串t,s和t中允许包含空格。
输出格式:
对于每组测试,输出在串s中删除所有和串t相同的子串后的结果串。
输入样例:
AABBBBCCDDEEBB
BB
输出样例:
AACCDDEE
代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
解题代码
#includeusing namespace std; int nexts[85]={0}; void getNext(string str) { for(int i=0;i<85;i++){ nexts[i]=0; } nexts[0]=-1; int len = str.size(); int j=-1; int i=0; while(i if(j==-1||nexts[j]==nexts[i]){ j++; i++; nexts[i]=j; }else{ j=nexts[j]; } } } string getAns(string a,string b) { int lena=a.size(); int lenb = b.size(); int i=0,j=0; while(i if(j==-1||a[i]==b[j]){ j++; i++; }else{ j=nexts[j]; } } if(j==lenb){ a.erase(i-j,lenb); return getAns(a,b); }else{ return a; } } int main() { string a,b; while(getline(cin,a)&&getline(cin,b)){ getNext(b); cout< 解题思路
我用的时kmp算法去找,然后找到一次删一次然后继续递归,直到所有的删完。简单的



