题目描述:

题目分析:这个不是搜索的题目,但是作为上一题的扩充,想要无效变得有效,那么就把无效的左括号和右括号分别去掉即可,需要知道一下两点:
-
如何让每对括号匹配起来?如何删除不合法的左括号?使用栈,每次遇到”(“就把index入栈,遇到")"就弹出一个”(“,他们就是一对匹配的括号,如果最后栈还剩下”(“,说明这些左括号是无法匹配的。
-
如何删除不合法的右括号?在遍历的同时记住左括号数量>=右括号数量,如果出现右括号导致不合法,那就删去。
思路就是把无效的东西改为空格,之后分割再拼接。
AC代码:
class Solution {
public String minRemoveToMakeValid(String s) {
StringBuilder sb = new StringBuilder(s);
int right = 0;
int left = 0;
for(int i =0;i<=sb.length()-1;i++){
if(sb.charAt(i)=='('){
left++;
}
if(sb.charAt(i)==')'){
right++;
}
if(right>left){
sb.setCharAt(i,' ');
right--;
}
}
Stack<Integer> stack = new Stack<>();
for(int i =0;i<=sb.length()-1;i++){
if(sb.charAt(i)=='('){
stack.add(i);
}
if(sb.charAt(i)==')'){
stack.pop();
}
}
for(int e : stack){
sb.setCharAt(e,' ');
}
String line = sb.toString();
String[] lines = line.trim().split(" ");
String ans = "";
for(int i =0;i<=lines.length-1;i++){
ans += lines[i];
}
return ans;
}
}
运行结果:

该博客讨论了一个算法问题,即如何通过删除无效的括号来使字符串中的括号匹配变得有效。通过使用栈数据结构,可以跟踪左括号并删除多余的右括号。同时,当左括号数量大于右括号时,删除多余的左括号。最终,删除所有无法配对的括号,实现字符串的有效化。代码示例展示了如何实现这一过程。
482

被折叠的 条评论
为什么被折叠?



