LeetCode周賽#106 Q2 Minimum Add to Make Parentheses Valid (棧)
題目來源:https://leetcode.com/contest/weekly-contest-106/problems/minimum-add-to-make-parentheses-valid/
問題描述
921. Minimum Add to Make Parentheses Valid
Given a string S
of '('
and ')'
parentheses, we add the minimum number of parentheses ( '('
or ')'
, and in any positions ) so that the resulting parentheses string is valid.
Formally, a parentheses string is valid if and only if:
- It is the empty string, or
- It can be written as
AB
(A
concatenated withB
), whereA
andB
are valid strings, or - It can be written as
(A)
, whereA
is a valid string.
Given a parentheses string, return the minimum number of parentheses we must add to make the resulting string valid.
Example 1:
Input: "())"
Output: 1
Example 2:
Input: "((("
Output: 3
Example 3:
Input: "()"
Output: 0
Example 4:
Input: "()))(("
Output: 4
Note:
S.length <= 1000
S
only consists of'('
and')'
characters.
------------------------------------------------------------
題意
給定一個由”(“和”)”組成的序列,可以在序列的任意位置新增”(“或”)”,問最少新增多少個”(“/”)”可以使得原序列變成合法的序列
------------------------------------------------------------
思路
用棧模擬左右括號的匹配過程,剩下多少個不能匹配就是需要增加的括號數量的最小值。
------------------------------------------------------------
程式碼
class Solution {
public:
int minAddToMakeValid(string S) {
vector<char> v;
int i, n = S.size();
char ch;
for (i=0; i<n; i++)
{
ch = S.at(i);
if (ch == '(')
{
v.push_back(ch);
}
else
{
if (!v.empty() && v.back() == '(')
{
v.pop_back();
}
else
{
v.push_back(ch);
}
}
}
return v.size();
}
};