k6k4刷題--括號匹配
阿新 • • 發佈:2018-11-20
原題連結: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