栈的使用例题

本文介绍了一道关于栈的应用题目——求最长合法括号子串。通过遍历字符串,利用栈的先进后出特性,遇到左括号入栈,遇到右括号时出栈并更新最长合法子串长度。栈中的节点记录对应括号的索引,以便判断括号匹配情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最长合法括号子串

import java.util.*;

public class Main {
   

    public static void main(String[] args){
       Scanner in=new Scanner (System.in);
       String x=in.next();
       boolean vis[]=new boolean[x.length()];
       int mar[]=new int[x.length()+1],cnt=0;
       Stack<Node>st=new Stack<>();
       for(int i=0;i<x.length();i++) {  
          if(x.charAt(i)=='(')st.push(new Node('(',i));
          else if(x.charAt(i)==')'&&!st.isEmpty()) {
              Node x1=st.pop();
              vis[x1.in]=true;
              vis[i]=true;
          }
       }
       for(int i=0;i<vis.length ;i++) {
           if(vis[i]==true)cnt++;
           else {
               mar[cnt]++;
               cnt=0;
           }
       }
       int isfind=0;
       if(cnt>0)mar[cnt]++;
       for(int i=vis.length;i>=0;i--)
           if(mar[i]!=0&&i!=0) {
               isfind=1;
               System.out.println(i+" "+mar[i]);
               break;
           }
        if(isfind==0)System.out.println(0+" "+1);
    }

}
class Node{
    char x;
    int in;
    public Node(char x, int in) {
        this.x = x;
        this.in = in;
    }
}

思路:该题考察栈的特性,先进后出。遍历字符串,遇到 '(' 就加入到栈中,遇到 ')' 就将栈顶的 '(' 出栈,其中栈中的每个节点保存着该字符在字符串中的索引,该标记法便于知道那些字符成功参与组成括号对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值