ValidParentheses.java 1.3 KB
Newer Older
W
wumingfang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
package com.example.bootdemo;

import java.util.Scanner;
import java.util.Stack;

public class ValidParentheses {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        boolean isValid = isValid(str);
        System.out.println(isValid);
    }

    public static boolean isValid(String s) {
        if (s.length() % 2 == 1) { // 如果字符串长度为奇数则不可能完全匹配
            return false;
        }

        Stack<Character> stack = new Stack<>();

        for (char ch : s.toCharArray()) {
            if (ch == '(' || ch == '[' || ch == '{') { // 左括号入栈
                stack.push(ch);
            } else { // 右括号出栈
                if (stack.isEmpty()) { // 如果栈为空,则说明没有与该右括号匹配的左括号
                    return false;
                }

                char top = stack.peek(); // 获取栈顶元素

                if ((ch == ')' && top != '(') || (ch == ']' && top != '[') || (ch == '}' && top != '{')) { // 匹配检查
                    return false;
                }

                stack.pop();
            }
        }

        return stack.isEmpty(); // 栈内还有元素则说明不完全匹配
    }
}