ภารกิจคือการค้นหาจำนวนสูงสุดของการลบลำดับย่อยที่กำหนดออกจากสตริง ให้ Astring และเราต้องหาจำนวนสูงสุดของ subsequence 'abc' ที่สามารถตัดออกจาก string ได้
ตอนนี้มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่าง:
อินพุต
s = ‘dnabcxy’
ผลลัพธ์
1
คำอธิบาย − สามารถพบลำดับย่อยของ 'abc' ได้เพียงรายการเดียวในสตริงที่กำหนด ('dnabcxy') ดังนั้นเอาต์พุตจึงเป็น 1
อินพุต
s = ‘zcabcxabc’
ผลลัพธ์
2 (‘zcabcxabc’)
แนวทางที่ใช้ในโปรแกรมด้านล่างดังนี้
-
ในฟังก์ชัน Max() เริ่มต้นตัวแปร i, a, ab, abc ด้วยค่า =0 และประเภท int
-
วนรอบจาก i=0 จนถึง I
-
ภายในลูปตรวจสอบว่า (s[i] =='a') ถ้าใช่ ให้เพิ่มค่า a.
-
อย่างอื่น ตรวจสอบว่า (s[i] =='b') ถ้าเป็นจริง ให้ตรวจสอบอีกครั้งว่า (a> 0) หากเงื่อนไขทั้งสองเป็นจริง ให้ลดค่า a ขึ้น 1 และเพิ่มค่า ab
-
สุดท้าย ตรวจสอบว่า (s[i] =='c') ถ้าเป็นจริง ให้ตรวจสอบอีกครั้งว่า (ab> 0) หากเงื่อนไขทั้งสองเป็นจริง ให้ลดค่า ab ลง 1 และเพิ่มค่า abc
-
กลับ abc
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int Max(string s){ int i=0, a=0, ab=0, abc=0; for (i = 0; i < s.length(); i++){ if (s[i] == 'a'){ a++; } else if (s[i] == 'b'){ if (a > 0){ a--; ab++; } } else if (s[i] == 'c'){ if (ab > 0){ ab--; abc++; } } } return abc; } //main function int main(){ string s = "zcabcxabc"; cout << Max(s); return 0; }
ผลลัพธ์
2