1249. Minimum Remove to Make Valid Parentheses
Posted beiyeqingteng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1249. Minimum Remove to Make Valid Parentheses相关的知识,希望对你有一定的参考价值。
Given a string s of ‘(‘
, ‘)‘
and lowercase English characters.
Your task is to remove the minimum number of parentheses ( ‘(‘
or ‘)‘
, in any positions ) so that the resulting parentheses string is valid and return any valid string.
Formally, a parentheses string is valid if and only if:
- It is the empty string, contains only lowercase characters, 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.
Example 1:
Input: s = "lee(t(c)o)de)" Output: "lee(t(c)o)de" Explanation: "lee(t(co)de)" , "lee(t(c)ode)" would also be accepted.
Example 2:
Input: s = "a)b(c)d" Output: "ab(c)d"
Example 3:
Input: s = "))((" Output: "" Explanation: An empty string is also valid.
Example 4:
Input: s = "(a(b(c)d)" Output: "a(b(c)d)"
分析:用一个stack来记录需要删除的括号,最后把它们删除了就可以了。
1 class Solution { 2 public String minRemoveToMakeValid(String s) { 3 StringBuilder sb = new StringBuilder(s); 4 Stack<Integer> st = new Stack(); 5 for (int i = 0; i < sb.length(); ++i) { 6 if (sb.charAt(i) == ‘(‘) { 7 st.add(i + 1); 8 } else if (sb.charAt(i) == ‘)‘) { 9 if (!st.empty() && st.peek() > 0) { 10 st.pop(); 11 } else { 12 st.add(-(i + 1)); 13 } 14 } 15 } 16 while (!st.empty()) { 17 sb.deleteCharAt(Math.abs(st.pop()) - 1); 18 } 19 return sb.toString(); 20 } 21 }
以上是关于1249. Minimum Remove to Make Valid Parentheses的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 1249. Minimum Remove to Make Valid Parentheses
[LeetCode] 1249. Minimum Remove to Make Valid Parentheses
LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix (最少翻转次数将二进制矩阵全部置为0)(示
LeetCode 1347. Minimum Number of Steps to Make Two Strings Anagram
[LeetCode 1368] Minimum Cost to Make at Least One Valid Path in a Grid
LeetCode 1723. 完成所有工作的最短时间 Find Minimum Time to Finish All Jobs(Java)