สมมติว่าเรามีสตริง 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