首页 >Java >java教程 >使用Java的最长平衡括号前缀的长度

使用Java的最长平衡括号前缀的长度

Patricia Arquette
Patricia Arquette原创
2025-02-07 11:55:10163浏览

Length of longest balanced parentheses prefix using Java

本文说明了如何使用Java查找最长平衡括号前缀的长度。首先,我们将使用几个示例理解问题,然后学习两种不同的方法来寻找问题。

问题解释

在这里,我们给出一个包含括号的字符串,我们需要从字符串中找到平衡的括号集的长度。换句话说,如果有所有开口括号

“(”(“

”),那么我们将其称为平衡。 从字符串的开头,前缀定义平衡集。例如,对于括号集'(())()',仅'(())'。 >输入和输出方案

为了更好地理解,让我们看一些输入和输出方案。

如果输入字符串为

“(()”

,平衡括号前缀为

()
    ,则长度为2。
  • 如果输入字符串为”(((())))(((“),平衡括号前缀为((()(()(()(()))))>所以长度为8。
  • >
  • 如果输入字符串为“(()()())()()”,平衡的括号前缀为(()()()()),则长度是6。
  • 最长平衡括号前缀的长度可以找到如下: 使用堆栈数据结构
  • 计数打开和关闭括号

使用堆栈数据结构
  • >可以使用堆栈。如果从堆栈中找到开口括号'
  • ',请将其推到堆栈上。如果找到闭合括号,请弹出堆栈,并将计数器变量增加2(平衡均值的长度您得到的是2。)继续执行此操作,并在变为空堆栈时返回计数器变量
  • >算法

算法如下:

如果字符为

>,将其推到堆栈上。> 如果

字符为

,则会弹出堆栈。
<code><p><b>ステップ1:</b>スタックとカウンタを初期化します。</p>
<p><b>ステップ2:</b>文字列の各文字を反復処理します。</p></code>
    >将计数器增加2。
  • 检查堆栈是否为空。
  • 如果是空的,则结束循环。
  • >
  • 步骤3:最后返回计数器。
  • >示例

    <code><p><b>ステップ1:</b>スタックとカウンタを初期化します。</p>
    <p><b>ステップ2:</b>文字列の各文字を反復処理します。</p></code>

    输出

    输入字符串是:((())((() 最长平衡括号前缀的长度为:6

    >

    计数打开和关闭括号

    此方法使用两个变量:计数和长度。如果字符为“

    ”(

    >”,则从字符串中获得1;如果字符计数为1;如果字符为“”,则减少数量为1,而增量长度则增加2。检查计数是否为0,如果是0,则退出循环并返回长度。 >示例

    <code class="language-java">import java.util.Stack;
    
    public class Example {
       public static int longestBalancedPrefix(String s) {
          Stack<character> stack = new Stack<>();
          int count = 0;
          for (int i = 0; i < s.length(); i++) {
             char c = s.charAt(i);
             if (c == '(') {
                stack.push(c);
             } else if (c == ')') {
                if (!stack.isEmpty()) {
                   stack.pop();
                   count += 2;
                }
             }
             if (stack.isEmpty()) {
                break;
             }
          }
          return count;
       }
    
       public static void main(String[] args) {
          String s = "((())(((";
          int length = longestBalancedPrefix(s);
          System.out.println("入力文字列は:" + s);
          System.out.println("最長のバランスの取れた括弧のプレフィックスの長さは:" + length);
       }
    }</character></code>
    输出

    输入字符串为((()()())((()))) 最长平衡的括号前缀长度为8

以上是使用Java的最长平衡括号前缀的长度的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn