21xrx.com
2024-09-19 09:53:00 Thursday
登录
文章检索 我的文章 写文章
Java实现最大括号深度:从基础到实践
2023-06-15 21:08:03 深夜i     --     --
- 括号匹配 - 栈数据结构 - 最大括号深度

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

在本文中,我们将从基础开始,讲解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. 关键词:

- 括号匹配

- 栈数据结构

- 最大括号深度

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复