判断有序括号列(Java)

本文介绍了如何使用Python解决牛客网NC52题中的有序括号列判断问题。通过栈的数据结构,详细讲解了如何通过遍历字符串,检查括号配对的规则来验证一个括号序列是否合法。关键在于正确运用栈操作来确保每种括号都有对应匹配,并在最后检查栈是否为空以确定序列完整闭合。

判断有序括号列

(牛客网—牛客题霸算法篇—NC52)

题目描述

给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。

思路

Java实现
每次遇到’(’,’{’,’[‘这三种字符的时候,将字符入栈stk;而每次遇到’)’,’}’,’]‘这三种字符的时候则让对应的匹配字符出栈。具体规则如下:
1)引入辅助栈stack,遍历字符串,每次遇到’(’,’{’,’[‘字符的时候将字符入栈stack
2)当遇到’)’,’}’,’]'字符的时候,则检查栈是否空,且顶元素是否为匹配元素(如{和}匹配等),如果栈空或者栈顶元素不为匹配元素则括号序列不合法
3)当栈非空,且栈顶元素为匹配元素,则栈顶元素出栈。
4)循环匹配字符串,直到每次字符处理完
5)检查栈stack是否为空,栈为空则序列合法,否则不合法(当括号以正确顺序关闭时则最后的栈为空)

代码实现

import java.util.*;
import java.util.Stack;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        if(s==null){
            return false;
        }
        char[] c=s.toCharArray();
        Stack<Character> stack=new Stack();
        char temp;
        for(int i=0;i<s.length();i++){
            switch(c[i]){
                case '(':
                case '[':
                case '{':
                    stack.push(c[i]);
                    break;
                case ')':
                    if(stack.empty()){
                        return false;
                    }
                    temp=stack.pop();
                    if(temp!='('){
                        return false;
                    }
                    break;
                case ']':
                    if(stack.empty()){
                        return false;
                    }
                    temp=stack.pop();
                    if(temp!='['){
                        return false;
                    }
                    break;
                case '}':
                    if(stack.empty()){
                        return false;
                    }
                    temp=stack.pop();
                    if(temp!='{'){
                        return false;
                    }
                    break;
            }
        }
        return stack.empty()?true:false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值