92 lines
2.1 KiB
Java
92 lines
2.1 KiB
Java
|
//给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效。
|
|||
|
//
|
|||
|
// 从形式上讲,只有满足下面几点之一,括号字符串才是有效的:
|
|||
|
//
|
|||
|
//
|
|||
|
// 它是一个空字符串,或者
|
|||
|
// 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
|
|||
|
// 它可以被写作 (A),其中 A 是有效字符串。
|
|||
|
//
|
|||
|
//
|
|||
|
// 给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
// 示例 1:
|
|||
|
//
|
|||
|
// 输入:"())"
|
|||
|
//输出:1
|
|||
|
//
|
|||
|
//
|
|||
|
// 示例 2:
|
|||
|
//
|
|||
|
// 输入:"((("
|
|||
|
//输出:3
|
|||
|
//
|
|||
|
//
|
|||
|
// 示例 3:
|
|||
|
//
|
|||
|
// 输入:"()"
|
|||
|
//输出:0
|
|||
|
//
|
|||
|
//
|
|||
|
// 示例 4:
|
|||
|
//
|
|||
|
// 输入:"()))(("
|
|||
|
//输出:4
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
// 提示:
|
|||
|
//
|
|||
|
//
|
|||
|
// S.length <= 1000
|
|||
|
// S 只包含 '(' 和 ')' 字符。
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
// Related Topics 栈 贪心算法
|
|||
|
// 👍 84 👎 0
|
|||
|
|
|||
|
package leetcode.editor.cn;
|
|||
|
|
|||
|
import java.util.Stack;
|
|||
|
|
|||
|
//921:使括号有效的最少添加
|
|||
|
public class MinimumAddToMakeParenthesesValid {
|
|||
|
public static void main(String[] args) {
|
|||
|
//测试代码
|
|||
|
Solution solution = new MinimumAddToMakeParenthesesValid().new Solution();
|
|||
|
}
|
|||
|
|
|||
|
//力扣代码
|
|||
|
//leetcode submit region begin(Prohibit modification and deletion)
|
|||
|
class Solution {
|
|||
|
public int minAddToMakeValid(String S) {
|
|||
|
int length = S.length();
|
|||
|
if (length == 0) {
|
|||
|
return 0;
|
|||
|
}
|
|||
|
int num = 0;
|
|||
|
Stack<Character> stack = new Stack<>();
|
|||
|
for (char ch : S.toCharArray()) {
|
|||
|
if (ch == ')') {
|
|||
|
if (stack.isEmpty()) {
|
|||
|
num++;
|
|||
|
} else {
|
|||
|
stack.pop();
|
|||
|
}
|
|||
|
} else {
|
|||
|
stack.push(ch);
|
|||
|
}
|
|||
|
}
|
|||
|
while (!stack.isEmpty()){
|
|||
|
num++;
|
|||
|
stack.pop();
|
|||
|
}
|
|||
|
return num;
|
|||
|
}
|
|||
|
}
|
|||
|
//leetcode submit region end(Prohibit modification and deletion)
|
|||
|
|
|||
|
}
|