括号匹配问题,数据结构JAVA

括号匹配问题
从键盘输入一个包含有花括号{}、中括号[]、小括号()的字符串,判断括号是否正确匹配,输出判断结果。
例如:
输入({d}{([a])({c})}),则正确匹配。
输入[q{w(6[7]g)]},则错误匹配。

该回答引用chatgpt:

img

package com.school;

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

public class BracketMatching {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入包含括号的字符串:");
        String input = scanner.nextLine();

        if (isBracketMatching(input)) {
            System.out.println("括号匹配正确");
        } else {
            System.out.println("括号匹配错误");
        }
    }

    private static boolean isBracketMatching(String input) {
        Stack<Character> stack = new Stack<>();

        for (char ch : input.toCharArray()) {
            if (ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);
            } else if (ch == ')' || ch == ']' || ch == '}') {
                if (stack.isEmpty()) {
                    return false;  // 右括号多于左括号,匹配错误
                }

                char top = stack.pop();
                if ((ch == ')' && top != '(') || (ch == ']' && top != '[') || (ch == '}' && top != '{')) {
                    return false;  // 括号类型不匹配,匹配错误
                }
            }
        }

        return stack.isEmpty();  // 括号匹配正确当且仅当栈为空
    }
}



  • 以下回答由chatgpt基于相关博客总结生成:

    Java实现括号匹配问题

    在Java中判断字符串中括号是否匹配,可以参考以下思路:

    1. 使用Stack(栈)数据结构,如果遇到左括号就入栈,匹配到右括号就弹出栈顶元素判断是否匹配,如果不匹配则跳出循环判断下一个字符。
    2. 如果所有的字符都遍历完了,栈中还存在元素(即有匹配不上的左括号),则说明不匹配。如果栈为空,则说明所有括号都匹配。

    代码实现:

    import java.util.Stack;
    
    public class BracketsMatch {
        public static void main(String[] args) {
            String brackets = "()[]{}";
            System.out.println(isValid(brackets));
        }
    
        public static boolean isValid(String s) {
            Stack<Character> stack = new Stack<>();
            for (char c : s.toCharArray()) {
                if (c == '(' || c == '[' || c == '{') {
                    stack.push(c);
                } else {
                    if (stack.isEmpty()) return false;
                    char topChar = stack.pop();
                    if (c == ')' && topChar != '(') return false;
                    if (c == ']' && topChar != '[') return false;
                    if (c == '}' && topChar != '{') return false;
                }
            }
            return stack.isEmpty();
        }
    }
    

    在上述代码中,我们首先定义了一个括号字符串,然后定义了一个isValid方法,用于判断传入的字符串是否符合要求。

    该方法中,我们首先定义了一个Stack,用于存放左括号,然后遍历所有字符,如果是左括号,则放入Stack中,如果是右括号,则弹出栈顶元素,判断是否匹配。如果都匹配,则继续循环,否则返回false。

    最后,如果Stack为空,则说明完全匹配,返回true,否则说明还存在左括号未匹配,返回false。

    需要注意的是,该方法只能判断括号是否完全匹配,对于其他非括号字符不做处理。如果括号未完全匹配,则没有输出错误信息,需要根据实际情况处理。

    针对输入字符串存在不规范情况的处理方式,可以在判断过程中增加错误提示或者使用异常处理机制,具体需要根据实际场景进行处理。