LeetCode 921. Minimum Add to Make Parentheses Valid
原题链接在这里:https://leetcode.com/problems/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.
题解:
When encountering (, leftCount++.
When encountering ), and leftCount > 0, leftCount--.
Otherwise, that means there is ) without (, res++.
Eventually, if leftCount > 0, that means there is ( without ). res += leftCount.
Time Complexity: O(n). n = S.length().
Space: O(1).
AC Java:
1 class Solution { 2 public int minAddToMakeValid(String S) { 3 if(S == null || S.length() == 0){ 4 return 0; 5 } 6 7 int res = 0; 8 int leftCount = 0; 9 for(int i = 0; i<S.length(); i++){ 10 char c = S.charAt(i); 11 if(c == '('){ 12 leftCount++; 13 }else if(leftCount > 0){ 14 leftCount--; 15 }else{ 16 res++; 17 } 18 } 19 20 res += leftCount; 21 return res; 22 } 23 }
类似Remove Invalid Parentheses, Minimum Remove to Make Valid Parentheses, Minimum Number of Swaps to Make the String Balanced.