题目来源: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();
}
};