我正在编写一个功能来满足这些要求:
给定一个字符串,如果它是一对零或多对括号的嵌套,则返回true,如(())
或((()))
。建议:检查第一个和最后一个字符,然后重复它们内部的内容。
nestParen("(())") → true
nestParen("((()))") → true
nestParen("(((x))") → false
网站上显示的正确解决方案是:
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;
}
我不明白为什么会这样。如果给定字符串的(
之外的字符与"
不同,那么它是否会触及其他情况并返回false而不是跳到下一个(
?
答案 0 :(得分:1)
如果输入字符串包含除(
和)
之外的其他内容以使此工作在调用此函数之前调用另一个函数,那么这肯定不会起作用:
clean(String str){
String str = "(((X+y)+z))";
String retStr = "";
for(int i = 0 ; i<str.length() ; i++){
if(str.charAt(i) == '(' || str.charAt(i) == ')')
{
retStr += str.charAt(i);
}
}
return retStr
}
然后使用retStr
的输入调用递归函数。
答案 1 :(得分:0)
正如许多示例代码所示,建议的正确解决方案是不合适的。
这是一个实际上正确的解决方案:
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;
}
}
说明:(与其他答案相同)