手撸代码系列(十七)--利用栈检查括号是否匹配

设计一个算法判定括号是否正确配对(包括三种括号并且需要考虑大中小三种括号的嵌套顺序)。

算法思想:

  1. 出现左括弧,进栈
  2. 出现右括弧,先判断栈是否为空
    (1)如果不为空,看是否匹配栈顶括号。
       (a)如果匹配,栈顶元素出栈。
  3. 最后检查栈是否空,如果为空,匹配成功,否则不匹配
import java.util.Scanner;
import java.util.Stack;
public class Main{
    public static void input(){
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        System.out.println(f(str));
        scanner.close();
    }
    private static boolean f(String string) {
        // 出现左括弧,进栈
        // 出现右括弧,先判断栈是否为空
                // 如果为空,右括号多余,不匹配
                // 如果不为空,看是否匹配栈顶括号
                        // 如果匹配,栈顶元素出栈
                        // 如果不匹配,直接是false类
        // 最后检查栈是否空,如果为空,匹配成功,否则不匹配
        Stack<Character> stack = new Stack<>(); //利用栈空间辅助
        for (int i = 0; i <string.length() ; i++) {
            Character ch = string.charAt(i);
            switch (ch){
                case '(':
                    stack.push(ch); // 如果是左括号,直接进栈
                    break;
                case ')': // 如果是右括号,先判断栈是否为空,然后和栈顶元素配对,如果可以配对,则出栈。
                    if (!stack.empty() && stack.peek() == '(')
                        stack.pop();
                    break;
                case '{':
                    stack.push(ch);
                    break;
                case '}':
                    if (!stack.empty() && stack.peek() == '{')
                        stack.pop();
                    break;

                case '[':
                    stack.push(ch);
                    break;
                case ']':
                    if (!stack.empty() && stack.peek() == '[')
                        stack.pop();
                    break;
            }
        }
        if (stack.empty())
            return true;
        return  false;
    }
    public static void main(String[] args) {
        input();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值