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