当前位置: 代码迷 >> 综合 >> 1033. 删除子串
  详细解决方案

1033. 删除子串

热度:77   发布时间:2023-12-06 11:28:14.0

在这里插入图片描述
input:
3
abaabbabaabb ab
abc abc
ababababababa aba
output:
case #0:
abab
case #1:

case #2:
bbba

思路:
直接用bf算法就行,找出来然后删除
tips:
for循环是在完成当前循环的所有语句进行下一次之前进行++(就是刚开始忘了-1然后导致wa了

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int n;
char s[2222],s0[111];
bool flag[2222];
void bf(char s[],char s0[])
{
    int cnt=0;int l=strlen(s),l0=strlen(s0);for(int i=0;i<=l;i++) flag[i]=0;for(int i=0;i<=l-l0+1;i++){
    //cout<<"i1="<<i<<" "<<"cnt="<<cnt<<endl;if(s[i]==s0[cnt]){
    //cout<<"i2="<<i<<endl;cnt++;for(int j=i+1;j<=i+l0-1;j++){
    if(s[j]==s0[cnt]) cnt++;else{
    cnt=0;break;} }if(cnt==l0){
    //cout<<"i="<<i<<endl;cnt=0;for(int j=i;j<=i+l0-1;j++){
    //cout<<"j="<<j<<" "<<endl;flag[j]=1;} i=i+l0-1;//cout<<"!!!"<<i<<endl;}}}for(int i=0;i<l;i++){
    //cout<<"i="<<i<<" "<<flag[i]<<endl;if(flag[i]==0) cout<<s[i];}cout<<endl;
}
int main()
{
    cin>>n;for(int i=1;i<=n;i++){
    cin>>s>>s0;cout<<"case #"<<i-1<<":"<<endl;bf(s,s0);}return 0;
}