有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

思路:
将字符串中的元素依次进行判定,若为左括号就进栈,若为右括号则与栈顶元素进行比较若为与之匹配的左括号:若匹配失败返回false;若条件成立,继续执行直到字符串遍历完,并且栈为空.

代码实现:

package Test;
import java.util.Stack;

public class Solution {

    public boolean isValid(String s) {
        //实例化一个栈
        Stack<Character> stack = new Stack<Character>();

        //遍历字符串
        for (int i = 0; i < s.length(); i++) {
            char ret = s.charAt(i);

            //若字符串第一个字符为右括号
            if (stack.isEmpty()){
                if(ret == '}' || ret == ']' || ret == ')'){
                    return false;
                }
            }

            //处理一般情况
            if (ret == '{' || ret == '[' || ret == '('){
                stack.push(ret);  //将该字符压入栈
            }else{
                if (ret == '}' && stack.peek() == '{') {
                    stack.pop();  //栈顶元素出栈
                }else if (ret == ']' && stack.peek() == '['){
                    stack.pop();
                }else if (ret == ')' && stack.peek() == '('){
                    stack.pop();
                }else{
                    return false;  //匹配失败
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值