【发布时间】:2018-05-21 15:25:28
【问题描述】:
我试图找出给定的输入是否是有效的括号。输入字符串由 '(', ')', '{', '}', '[' and ']' 组成。
输入字符串在以下情况下有效:
1.开括号必须用相同类型的括号括起来。
2.开括号必须以正确的顺序闭合。
3.空字符串有效
但是,我下面使用递归的代码不适用于有效情况。假设转到基本情况(当输入为“”时),而是转到 for 循环之后的 return 语句。
class Solution {
public boolean validParen(String input) {
if(input.isEmpty()) {
return true;
}
else {
for (int i = 0; i < input.length() - 1; i++) {
if ((input.charAt(i) == '(' && input.charAt(i + 1) == ')') ||
(input.charAt(i) == '{' && input.charAt(i + 1) == '}') ||
(input.charAt(i) == '[' && input.charAt(i + 1) == ']')) {
input = input.substring(0, i) + input.substring(i + 2);
System.out.println("Input is " + input);
validParen(input);
}
}
return false;
}
}
public static void main(String[] args) {
Solution sol = new Solution();
//System.out.println(sol.validParen(""));
//System.out.println(sol.validParen("()")); // returns false for some reason
//System.out.println(sol.validParen("()[]{}")); // returns false for some reason
//System.out.println(sol.validParen("(]"));
//System.out.println(sol.validParen("([)]"));
//System.out.println(sol.validParen("{[]}")); // returns false for some reason
}
}
【问题讨论】:
-
不详述,但您是否考虑过使用堆栈(在 LIFO 集合的意义上,而不是旧的
Stack)?
标签: java algorithm math recursion parentheses