1. 程式人生 > >k6k4刷題--括號匹配

k6k4刷題--括號匹配

原題連結:1050-括號匹配

題目

給定一個僅由 '(',')','{','}','[',']' 構成非空字串,判定該字串中括號是否成對出現,並按順序閉合。
如:
(1)輸入:[{()}] 輸出:true
(2)輸入:[{[)}] 輸出:false

輸入、輸出描述

輸入:str: 非空字串

輸出:如果str中的括號成對出現,並按順序閉合,則返回true;否則返回false

Example

輸入:str=[{[)}]

輸出:false

解法

思路:

本題考查的是問題,使用一個字元陣列char[] 和一個整數指標 構成一個棧。

依次遍歷輸入字串陣列的每一個字元,如果遇到字元:'{','[','(',則壓入棧中,

如果遇到字元:'}',']',')',則從棧中彈出一個字元,有以下兩種情況導致匹配失敗:

(1)棧為空

(2)棧頂字元和當前字元不匹配,如'{'和']'不匹配

當遍歷完整個字元序列時,如果棧為空,則表示所有的字元匹配成功,否則匹配失敗。

java Code:

public class Main1050 {

    public boolean solution(String str) {
        if (str == null || str.isEmpty()) { //對輸入字串進行合法性校驗
            return false;
        }
        char[] stack = new char[str.length()];
        int top = 0;
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (ch == '{' || ch == '[' || ch == '(') {
                stack[top++] = ch;
            } else {
                //棧為空
                if (top == 0) {
                    return false;
                }
                char ch1 = stack[--top];
                //括號不匹配
                if ((ch1 == '{' && ch != '}') ||
                        (ch1 == '[' && ch != ']') ||
                        (ch1 == '(' && ch != ')')
                        ) {
                    return false;
                }
            }
        }
        return top == 0 ? true : false;
    }

    public static void main(String[] args) {
        Main1050 x = new Main1050();
        String test = "{[()]}";
        System.out.println(x.solution(test));
        test = "[)";
        System.out.println(x.solution(test));

    }
}

以上程式碼在k6k4線上程式設計通過所有的case:  原題連結:1050-括號匹配

Successed! Case passed count:6/6 [Time]1 millisecond [Memory]1KB