Why does this recursive method work?
我正在编写一个函数来满足这些要求:给定一个字符串,如果它是零对或多对括号的嵌套,如
1 2 3 | nestParen("(())") → true nestParen("((()))") → true nestParen("(((x))") → false |
现场显示的正确解决方案是:
1 2 3 4 5 6 7 | public boolean nestParen(String str) { if (str.equals("")) return true; if (str.charAt(0) == '(' && str.charAt(str.length()-1) == ')') return nestParen(str.substring(1,str.length()-1)); else return false; } |
我不明白为什么会这样。如果给定的字符串有一个与
如果输入字符串中包含除
1 2 3 4 5 6 7 8 9 10 11 |
然后使用
正如许多示例代码中常见的那样,建议的正确解决方案是不适当的。
下面是一个实际正确的解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public boolean nestParen(final String value) { if (value != null) { if (value.isEmpty()) { return true; } if (value.charAt(0) == '(' && value.charAt(value.length()-1) == ')') { return nestParen(value.substring(1, value.length()-1)); } else { return false; } } else // value is null { return true; } } |
解释:(同另一个答案)