我需要编写一个程序来检查括号是否平衡,我知道该怎么做并且已经实现了。但是,还有第二部分我遇到了麻烦, “如果字符串没有正确嵌套和平衡,则给出一个返回第一个引起括号的字符串中位置的算法。也就是说,如果找到一个多余的右括号,则返回其位置;如果左括号太多,则返回第一个多余的左括号的位置。“
我们还没有了解堆栈或正则表达式,所以我无法利用它们。下面是我的实现,以检查嵌套括号是否平衡。
public static int checkNest(char[] arr) {
int counter = 0,index = 0;
for(int i=0; i<arr.length; i++) {
if(arr[i] == '(')
counter++;
else if(arr[i] == ')')
counter--;
}
if(counter == 0)
index = -1;
return index;
}
现在不正确的索引将始终为0,我需要操纵我的代码以正确显示不正确的括号的索引。
答案 0 :(得分:0)
通常,当您有多个括号类型时,必须使用Stack
。您只有一个错误:发现反括号时,应保持反调并增加反斜率;反之,则应减少反斜率。当计数器在迭代的任何步骤均为负数时-则不平衡。
public static boolean isBalanced(String str) {
Deque<Character> stack = new LinkedList<>();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == '(' || ch == '[' || ch == '{')
stack.push(ch);
else {
if (stack.isEmpty())
return false;
char prv = stack.pop();
if (prv == '(' && ch != ')')
return false;
if (prv == '[' && ch != ']')
return false;
if (prv == '{' && ch != '}')
return false;
}
}
return stack.isEmpty();
}
如果您只有一种类型的括号,那么您可能只有一个计数器:
public static boolean isBalanced(String str) {
int count = 0;
for (int i = 0; i < str.length() && count >= 0; i++) {
if (str.charAt(i) == '(')
count++;
else if (str.charAt(i) == ')')
count--;
}
return count == 0;
}
答案 1 :(得分:0)
public static int checkNest(char[] arr) {
int counter = 0,index = 0;
for(int i=0; i<arr.length; i++) {
// Only one incorrect parentheses.
index = i;
if(arr[i] == '(')
counter++;
else if(arr[i] == ')')
counter--;
}
if(counter == 0)
index = -1;
return index;
}
答案 2 :(得分:0)
对于额外的右括号,如果计数器为零,您可以立即返回i
的当前值,但是对于额外的左括号,您必须继续解析字符串直到结尾,因此必须记住counter==0
中最后一个左括号的位置:
public static int checkNest(char[] arr) {
int counter = 0,index = -1;
for(int i=0; i<arr.length; i++) {
if(arr[i] == '(') {
if (counter == 0) {
index = i;
}
counter++;
} else if(arr[i] == ')') {
if (counter == 0) {
return i;
}
counter--;
}
}
if (counter == 0) {
return -1;
}
return index;
}