21xrx.com
2025-03-31 03:53:25 Monday
文章检索 我的文章 写文章
Java实现最大括号深度:从基础到实践
2023-06-15 21:08:03 深夜i     8     0
- 括号匹配 - 栈数据结构 - 最大括号深度

括号匹配是计算机编程中的一个基础问题。在编写程序时,我们常常会用到括号来限定代码块。然而,括号的匹配并不总是容易处理的。

在本文中,我们将从基础开始,讲解Java如何实现括号匹配的问题,并介绍如何使用栈的数据结构来实现最大括号深度的问题。

1. 基础:如何判断括号是否匹配?

判断两个括号是否匹配,可以使用栈的数据结构来完成。具体来说,我们在扫描字符串时,如果遇到左括号,就将其压入栈中;如果遇到右括号,就弹出栈顶元素,判断其是否与当前括号匹配。

示例代码如下:

public boolean isMatched(String s) {
  Stack
  stack = new Stack<>();
 
  for (char c : s.toCharArray()) {
    if (c == '(' || c == '[' || c == '{') {
      stack.push(c);
    } else if (c == ')' || c == ']' || c == '}') {
      if (stack.isEmpty())
        return false;
      
      char top = stack.pop();
      if ((top == '(' && c != ')') ||
        (top == '[' && c != ']') ||
        (top == '' && c != ''))
        return false;
      
    }
  }
  return stack.isEmpty();
}

2. 实践:如何求最大括号深度?

最大括号深度是指一个字符串中最长的连续括号嵌套的深度。例如,对于字符串"((()))()(()(()))",最大括号深度为3。

我们可以使用栈的数据结构来解决这个问题。具体来说,我们可以维护一个栈,每当遇到左括号时,将其压入栈中;每当遇到右括号时,弹出栈顶元素,并更新当前的最大深度。

示例代码如下:

public int maxDepth(String s) {
  Stack
  stack = new Stack<>();
 
  int depth = 0;
  int maxDepth = 0;
  for (char c : s.toCharArray()) {
    if (c == '(') {
      stack.push(c);
      depth++;
    } else if (c == ')') {
      if (!stack.isEmpty() && stack.peek() == '(') {
        stack.pop();
        depth--;
      } else
        return -1; // 括号不匹配
      
    }
    maxDepth = Math.max(maxDepth, depth);
  }
  return stack.isEmpty() ? maxDepth : -1; // 栈非空说明括号不匹配
}

3. 关键词:

- 括号匹配

- 栈数据结构

- 最大括号深度

  
  

评论区