下面是详细讲解“Java移除无效括号的方法实现”的完整攻略,包含以下步骤和示例说明。
1. 需求分析
需要编写一段Java程序,输入一行字符串,将其中的所有无效括号(即没有与之匹配的左括号的右括号或没有与之匹配的右括号的左括号)移除掉,输出筛选后的字符串。
2. 设计思路
2.1 定义数据结构
为了实现这个功能,我们需要定义一个数据结构来存储字符串中的括号。由于括号具有左右之分,因此我们可以使用栈来存储左括号,每当遇到右括号时,从栈中取出一个左括号进行匹配。如果栈为空或者栈顶元素不匹配,则说明该右括号是无效括号。
2.2 编写代码
基于以上思路,我们可以将代码分成以下几步:
- 定义一个栈s用于存储左括号。
- 遍历字符串中的每个字符,如果是左括号则入栈,如果是右括号则弹出一个栈顶的左括号进行匹配。
- 完成字符串遍历后,栈中剩余的左括号即为无效括号,将其从字符串中移除即可。
3. 示例说明
3.1 示例1:输入字符串为"((a)((b))c)",输出字符串为"(a)(b)c"
代码实现如下:
public static String removeInvalidParentheses(String s) {
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < sb.length(); i++) {
char c = sb.charAt(i);
if (c == '(') {
stack.push(i);
} else if (c == ')') {
if (stack.isEmpty()) {
sb.deleteCharAt(i);
i--;
} else {
stack.pop();
}
}
}
while (!stack.isEmpty()) {
sb.deleteCharAt(stack.pop());
}
return sb.toString();
}
3.2 示例2:输入字符串为"1+(23)-4(5-6)+7",输出字符串为"1+23-4(5-6)+7"
代码实现如下:
public static String removeInvalidParentheses(String s) {
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < sb.length(); i++) {
char c = sb.charAt(i);
if (c == '(') {
stack.push(i);
} else if (c == ')') {
if (stack.isEmpty()) {
sb.deleteCharAt(i);
i--;
} else {
stack.pop();
}
}
}
while (!stack.isEmpty()) {
sb.deleteCharAt(stack.pop());
}
return sb.toString();
}
以上就是Java移除无效括号的方法实现的详细攻略和示例说明,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java移除无效括号的方法实现 - Python技术站