檢查字串是否可以透過遞迴刪除給定子字串在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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告