📅  最后修改于: 2023-12-03 15:40:31.663000             🧑  作者: Mango
如果你想要检查一个二维数组中的两个符号是否关闭,你可以通过以下方式实现:
使用两层for循环来遍历二维数组中的所有元素,比较值是否相等。代码片段如下:
public boolean checkClosing(char[][] array, char open, char close) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] == open) {
int count = 1;
for (int k = j + 1; k < array[i].length; k++) {
if (array[i][k] == open) {
count++;
} else if (array[i][k] == close) {
count--;
}
if (count == 0) {
break;
}
}
if (count != 0) {
return false;
}
} else if (array[i][j] == close) {
return false;
}
}
}
return true;
}
在上述代码中,我们假设传入的开括号为"open",闭括号为"close",并遍历所有元素以寻找开括号。如果找到了,我们计算它的数量,并使用一个嵌套的for循环来遍历数组剩余部分,以确保正确计数。如果计数到达零,说明已经找到了相应的闭括号。如果已经遍历完数组但是计数不为零,说明我们并没有找到匹配的闭括号。
使用栈来实现,遇到开括号入栈,遇到闭括号则弹出栈顶元素进行匹配,如果匹配失败则返回false。下面是相关代码片段:
public boolean checkClosing(char[][] array, char open, char close) {
Stack<Character> stack = new Stack<>();
for (char[] row : array) {
for (char c : row) {
if (c == open) {
stack.push(c);
} else if (c == close) {
if (stack.isEmpty() || stack.pop() != open) {
return false;
}
}
}
}
return stack.isEmpty();
}
在上述代码中,我们首先创建一个栈,然后遍历二维数组中的每个元素。当遇到开括号时,我们将其推入栈中。当遇到闭括号时,我们从栈中弹出一个元素进行匹配,并检查其是否等于我们传入的开括号。如果不相等或栈为空,则说明匹配失败。如果在遍历结束后栈还不为空,说明我们还有未匹配的开括号。如果同时都匹配成功,则说明两个符号已经关闭。
总结:
上述两种方法都是可行的,具体选择哪种可以根据自己的情况而定。方法一在空间复杂度上优于方法二,因为不需要使用额外的内存来存储栈。而方法二则可以更好的解决字符嵌套的情况,并且它的时间复杂度是线性的。
建议大家可以多多练习,来加深印象和提高掌握技能。