检查字符串是否可以通过递归删除给定子字符串在C++中变为空


假设我们有两个字符串,str1 和 str2。str2 是 str1 的子字符串,我们可以从 str1 中删除 str2。str2 可能会在 str1 中出现多次。我们的目标是确定如果我们多次从 str1 中删除 str2,str1 是否会变成空字符串。如果可能,我们返回 1,否则返回 0。

因此,如果输入类似于 str1 = "CCCPPPPPP",str2 = "CPP";则输出为真。

为了解决这个问题,我们将遵循以下步骤:

  • 当 str1 的大小 > 0 时,执行:
    • index := 返回 str2 在 str1 中的起始位置。
    • 如果 index 等于 -1,则:
      • 退出循环。
    • 从 str1 中删除 str2。
  • 如果 str1 的大小等于 0,则返回 1,否则返回 0。

示例 (C++)

让我们看看下面的实现来更好地理解:

 在线演示

#include<bits/stdc++.h>
using namespace std;
bool solve(string str1, string str2) {
   while (str1.size() > 0) {
      int index = str1.find(str2);
      if (index == -1)
      break;
      str1.erase(index, str2.size());
   }
   return (str1.size() == 0);
}
int main() {
   string str1 = "CCCPPPPPP", str2 = "CPP";
   cout<<solve(str1, str2)<<endl;
   return 0;
}

输入

"CCCPPPPPP", "CPP"

输出

1

更新于:2021年1月18日

154 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告