题目描述

给定一个字符串(brackets),字符串中只包含 (){}[]六种括号,现需要判断输入的字符串中,括号是否匹配。

输入描述

一个字符串brackets,字符串长度<10^5

输出描述

true或false

示例

示例输入1

({})

示例输出1

true

示例输入2

({)}

示例输出2

false

代码

package com.domcer;

import java.util.Scanner;

/**
 * @author hang.wang
 */
public class BracketsAdapt {

    private static final Scanner SCANNER = new Scanner(System.in);

    public static void main(String[] args) {
        String brackets = SCANNER.next();
        System.out.println(getBracketsAdaptation(brackets));
        //   ()       {}       []
        // 40 41   123 125   91 93
    }

    public static boolean getBracketsAdaptation(String brackets) {
        // 如果字符串长度为奇数 返回false
        if (brackets.length() % 2 != 0) {
            return false;
        }

        // 如果字符串首位是后括号 返回false
        if (brackets.charAt(0) == ')' || brackets.charAt(0) == '}' || brackets.charAt(0) == ']') {
            return false;
        }

        // 创建一个char类型的数组,如果遍历字符串的字符是前括号,就存进去
        char[] list = new char[brackets.length()];
        // size代表char数组的大小,也代表了从哪里存,起到一个index的效果
        int size = 0;

        for (int i = 0; i < brackets.length(); i++) {

            char currentChar = brackets.charAt(i);
            if (currentChar == '(' || currentChar == '{' || currentChar == '[') {
                list[size] = currentChar;
                size++;
            } else {
                if (size ==0) {
                    return false;
                }

                char tempChar;
                switch (currentChar) {
                    case ')':
                        tempChar = ')'-1;
                        break;
                    default:
                        tempChar = (char) (currentChar-2);
                        break;
                }

                if (list[size-1] != tempChar) {
                    return false;
                }
                size--;
            }
        }
        return size == 0;
    }

}

代码未必是最优解

最后修改:2023 年 01 月 09 日
如果觉得我的文章对你有用,请随意赞赏