สมมติว่าเรามีสตริง S ที่มีอักขระ n ตัว S มีตัวอักษรภาษาอังกฤษตัวพิมพ์เล็กและอักขระ ')' สตริงไม่ถูกต้อง หากจำนวนอักขระ ')' ต่อท้ายมากกว่าจำนวนอักขระที่เหลืออย่างเคร่งครัด ต้องเช็คว่าเอสเสียหรือเปล่า
ดังนั้น หากอินพุตเป็นเหมือน S ="fega)))))" ผลลัพธ์จะเป็น True เพราะนี่แย่เพราะมี 4 ตัวอักษรและ 6 ')
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
ans := 0 n := size of S i := n - 1 while (i >= 0 and S[i] is same as ')'), do: (decrease i by 1) z := n - 1 - i ans := 2 * z - n if ans > 0, then: return true Otherwise return false
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
bool solve(string S) {
int ans = 0;
int n = S.size();
int i = n - 1;
while (i >= 0 && S[i] == ')')
i--;
int z = n - 1 - i;
ans = 2 * z - n;
if (ans > 0)
return true;
else
return false;
}
int main() {
string S = "fega))))))";
cout << solve(S) << endl;
} อินพุต
"fega))))))"
ผลลัพธ์
1