สมมติว่าเรามีสตริงที่มีเพียง '(' และ ')' เราต้องหาจำนวนวงเล็บขั้นต่ำที่สามารถแทรกได้เพื่อให้สตริงมีความสมดุล
ดังนั้น หากอินพุตเป็นแบบ "(()))(" ดังนั้นเอาต์พุตจะเป็น 2 เป็น "(()))(" ค่านี้จะสมดุลได้เหมือน"((()))()"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
:=0, cnt :=0
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ถ้า s[i] เหมือนกับ '(' แล้ว −
-
(เพิ่มขึ้น o 1)
-
-
มิฉะนั้น
-
ถ้า o ไม่ใช่ศูนย์ ดังนั้น −
-
(ลดลง o 1)
-
-
มิฉะนั้น
-
(เพิ่มขึ้นอีก 1)
-
-
-
-
ส่งคืน cnt + o
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(string s) { int o = 0; int cnt = 0; for(int i = 0; i < s.size(); i++){ if(s[i] == '('){ o++; } else { if(o) o--; else cnt++; } } return cnt + o; } }; int main(){ Solution ob; cout << (ob.solve("(()))(")); }
อินพุต
Input: "(()))("
ผลลัพธ์
2