Skip to content

Latest commit

 

History

History
138 lines (111 loc) · 3.08 KB

File metadata and controls

138 lines (111 loc) · 3.08 KB

中文文档

Description

A parentheses string is valid if and only if:

  • It is the empty string,
  • It can be written as AB (A concatenated with B), where A and B are valid strings, or
  • It can be written as (A), where A is a valid string.

You are given a parentheses string s. In one move, you can insert a parenthesis at any position of the string.

  • For example, if s = "()))", you can insert an opening parenthesis to be "(()))" or a closing parenthesis to be "())))".

Return the minimum number of moves required to make s valid.

 

Example 1:

Input: s = "())"
Output: 1

Example 2:

Input: s = "((("
Output: 3

 

Constraints:

  • 1 <= s.length <= 1000
  • s[i] is either '(' or ')'.

Solutions

Python3

class Solution:
    def minAddToMakeValid(self, s: str) -> int:
        stk = []
        for c in s:
            if c == '(':
                stk.append(c)
            else:
                if stk and stk[-1] == '(':
                    stk.pop()
                else:
                    stk.append(c)
        return len(stk)

Java

class Solution {
    public int minAddToMakeValid(String s) {
        Deque<Character> stk = new ArrayDeque<>();
        for (char c : s.toCharArray()) {
            if (c == '(') {
                stk.push(c);
            } else {
                if (!stk.isEmpty() && stk.peek() == '(') {
                    stk.pop();
                } else {
                    stk.push(c);
                }
            }
        }
        return stk.size();
    }
}

C++

class Solution {
public:
    int minAddToMakeValid(string s) {
        stack<char> stk;
        for (char& c: s)
        {
            if (c == '(') stk.push(c);
            else
            {
                if (!stk.empty() && stk.top() == '(') {
                    stk.pop();
                }
                else stk.push(c);
            }
        }
        return stk.size();
    }
};

Go

func minAddToMakeValid(s string) int {
	var stk []rune
	for _, c := range s {
		if c == '(' {
			stk = append(stk, c)
		} else {
			if len(stk) > 0 && stk[len(stk)-1] == '(' {
				stk = stk[:len(stk)-1]
			} else {
				stk = append(stk, c)
			}
		}
	}
	return len(stk)
}

...