สมมติว่าเราได้รับสองสตริง 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