括号匹配问题 从键盘输入一个包含有花括号{}、中括号[]、小括号()的字符串,判断括号是否正确匹配,输出判断结果。

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

刚不是有一个了么 https://ask.csdn.net/questions/7969779

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基于相关博客总结生成:

    可以使用栈的数据结构来解决括号匹配问题。具体步骤如下:

    1. 从键盘输入一个字符串:使用input函数获取用户输入的字符串。

    2. 定义一个栈:使用列表来模拟栈的数据结构。初始化为空列表。

    3. 遍历字符串中的每一个字符:使用for循环逐个获取字符串中的字符。

    4. 判断是否为左括号:判断字符是否为花括号“{”、“}”、中括号“[”、“]”或小括号“(”、“)”,如果是,将其压入栈中。

    5. 判断是否为右括号:如果是右括号,则从栈中弹出一个元素判断是否与当前右括号匹配,如果不匹配则括号不匹配,输出错误信息,退出程序。

    6. 判断栈是否为空:如果在遍历完字符串后,栈中还有元素,说明左括号比右括号多,输出错误信息,退出程序。

    7. 输出正确信息:如果以上步骤都没有出现错误信息,说明括号匹配正确,输出正确信息。

    具体代码如下:

    def check_brackets(str):
        stack = []
        left_brackets = ["{", "[", "("]
        right_brackets = ["}", "]", ")"]
        for char in str:
            if char in left_brackets:
                stack.append(char)
            elif char in right_brackets:
                if not stack:
                    print("括号不匹配")
                    return
                index = right_brackets.index(char)
                if stack[-1] == left_brackets[index]:
                    stack.pop()
                else:
                    print("括号不匹配")
                    return
        if stack:
            print("括号不匹配")
        else:
            print("括号匹配正确")
    

    在这个函数中,left_brackets列表和right_brackets列表分别存储左括号和右括号,通过比较它们的位置是否一致来判断是否匹配。如果左括号与右括号不匹配,则直接输出错误信息;如果是合法的括号匹配,则最后栈中应该为空,否则输出错误信息。