📜  检查2个符号是否关闭二维数组java(1)

📅  最后修改于: 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();
}

在上述代码中,我们首先创建一个栈,然后遍历二维数组中的每个元素。当遇到开括号时,我们将其推入栈中。当遇到闭括号时,我们从栈中弹出一个元素进行匹配,并检查其是否等于我们传入的开括号。如果不相等或栈为空,则说明匹配失败。如果在遍历结束后栈还不为空,说明我们还有未匹配的开括号。如果同时都匹配成功,则说明两个符号已经关闭。

总结:

上述两种方法都是可行的,具体选择哪种可以根据自己的情况而定。方法一在空间复杂度上优于方法二,因为不需要使用额外的内存来存储栈。而方法二则可以更好的解决字符嵌套的情况,并且它的时间复杂度是线性的。

建议大家可以多多练习,来加深印象和提高掌握技能。