Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าสตริงสามารถว่างได้โดยการลบสตริงย่อยที่กำหนดซ้ำใน C ++


สมมติว่าเราได้รับสองสตริง str1 และ str2 str2 เป็นสตริงย่อยของ str1 และเราสามารถลบ str2 ออกจาก str1 ได้ เป็นไปได้ที่สตริง str2 ปรากฏขึ้นหลายครั้งใน str1 เป้าหมายของเราที่นี่คือการค้นหาว่า str1 กลายเป็นสตริงว่างหรือไม่ หากเราลบ str2 ออกจาก str1 หลายครั้ง หากเป็นไปได้ เราจะคืนค่า 1 มิฉะนั้น 0

ดังนั้น หากอินพุตเป็น str1 ="CCCPPPPP", str2 ="CPP"; แล้วผลลัพธ์จะเป็นจริง

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ในขณะที่ขนาดของ str1> 0, ทำ −
    • index :=ส่งคืนตำแหน่งเริ่มต้นสตริงของ str2 ใน str1
    • ถ้าดัชนีเหมือนกับ -1 แล้ว −
      • ออกมาจากวงจร
    • ลบ str2 ออกจาก str1
  • ส่งคืน 1 หากขนาดของ str1 ใกล้เคียงกับ 0 มิฉะนั้น 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