LeetCode ---- 20.有效的括號 (字符串,棧)

題目描述

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。

有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。

示例 1:
輸入: “()”
輸出: true

示例 2:
輸入: “()[]{}”
輸出: true

示例 3:
輸入: “(]”
輸出: false

示例 4:
輸入: “([)]”
輸出: false

示例 5:
輸入: “{[]}”
輸出: true

思路:把字符串中左括號的值存進一個棧中,若取到第一個不爲左括號的值(即爲右括號), 此時可以進行彈棧並進行左右括號的匹配處理,若有一個不符合直接跳出循環(題中的判斷主要是爲了驗證棧空與非空對題目的影響)

import java.util.Stack;
class Solution {
    public boolean isValid(String s) {
     
		//1.第一種情況,若爲""直接返回true
		if(s.equals("")) {
			return true;
		}
		
		//2.第二種情況,判斷左右括號匹配(中間的判斷只是爲了整體的合理性)
		Stack<String> stack1 = new Stack<String>();
		boolean flag = false;
		for(int i = 0; i < s.length(); i++) {
			if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
				stack1.push(s.charAt(i)+"");
			}else {
				//2.1 若取右邊括號時,棧爲空則證明無左括號
				if(!stack1.isEmpty()) {
					//取出右括號的值
					String temp = s.charAt(i)+"";
					//彈出棧中左括號的值
					String temp_l = stack1.pop();
					//System.out.println(temp_l+":"+temp);
					//進行左右括號的匹配
					if((temp_l.equals("(")  && temp.equals(")")) ||
					   (temp_l.equals("[")  && temp.equals("]")) ||	
					   (temp_l.equals("{")  && temp.equals("}"))) {
						flag = true;
					}else {
						//若有一個不符合,直接跳出
						flag = false;
						break;
					}
				}else {
					flag = false;
				}
			}
		}
		//若棧非空,則還有左括號未匹配
		if(!stack1.isEmpty()) {
			flag = false;
		}
		
		return flag;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章