我正在尝试编写一个方法来确定字符串中嵌套的括号对。 例子: "(())"是真的 "((4))"是假的 "()()"是假的 "((())"是假的
public static boolean nestedBrackets(String s){
if(s.length()<4){
return false;
}
else if(s.charAt(0) == '('&&s.charAt(s.length()-1)== ')'){
if(s.charAt(1)=='('&&s.charAt(s.length()-2)==')'&&s.length()==4){
return true;
}
else if(s.charAt(2)=='(' && s.charAt(s.length()-3)==')'&&s.length()==6){
return true;
}
else {
return false;
}
}
else {
return false;
答案 0 :(得分:2)
由于您的问题被标记为&#34;递归,&#34;提供递归解决方案。
public static boolean nestedBrackets(String s)
{
if (s.length() < 2)
{
return false;
}
if (s.charAt(0) != '(')
{
return false;
}
if (s.charAt(s.length() - 1) != ')')
{
return false;
}
if (s.length() == 2)
{
return true;
}
return nestedBrackets(s.substring(1, s.length() - 1));
}
实施很简单。对于每次递归,请确保整个表达式在括号内,然后递归括号内的内容。达到一对括号的终端条件:&#34;()&#34;。
注意:您没有提到空字符串大小写的预期结果(&#34;&#34;)。下面提供的上述解决方案为空字符串返回false
。
答案 1 :(得分:0)
为了递归地执行此操作,我们需要考虑归纳。所以我的基本情况是:
我的归纳步骤是:
从左边开始找到第一个(如果我找到a)然后返回false
从右边开始,找到第一个)如果我找到了(返回false
如果我从右边找到(从左边和a),然后将字符串缩小到它们之间的子字符串并递归。
因此,伪代码看起来像:
Public Boolean ParenFinder(String testString){
int left = 0;
int right = 0;
for (int i = 0; i < testString.length(); i++){
if (testString.charAt(i) == '('){
left = i;
break;
}
if (testString.charAt(i) == ')'){
return false;
}
}
for (int i = testString.length(); i > 0; i--){
if (testString.charAt(i) == ')'){
right = i;
break;
}
if (testString.charAt(i) == '('){
return false;
}
}
if (left == 0 && right == 0 && testString.charAt(0) != '(')
return true;
return (ParenFinder(testString.subString(left, right));
}