leetcode-question20 有效的括號

題目描述

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

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

示例 1:

輸入: “()”
輸出: true

示例 2:

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

示例 3:

輸入: “(]”
輸出: false

示例 4:

輸入: “([)]”
輸出: false

示例 5:

輸入: “{[]}”
輸出: true

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-parentheses
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路

用棧來解決,如果是“(”,“[”,{" 時入棧,如果是對應的“)”,“]”,}" 時出棧,如果不是對應的字符,則不是有效字符串。字符串長度爲奇數時,也不是有效字符串。

代碼:

import java.util.Stack;
import java.util.Map;
import java.util.HashMap;
class Solution {
    public boolean isValid(String s) {
        if(s == null || "".equals(s)){
            return true;
        }
        if(s.length()%2 == 1){
            return false;
        }
        Map<String,String> map = new HashMap<String,String>();
        map.put("}","{");
        map.put("]","[");
        map.put(")","(");
        Stack<String> stack = new Stack<String>();
        String [] s2Array = s.split("");
        for(int i = 0; i < s2Array.length;++i){
            if("{".equals(s2Array[i]) || "[".equals(s2Array[i]) || "(".equals(s2Array[i])){
                stack.push(s2Array[i]);
            }else{
                if(!stack.isEmpty()&&stack.peek().equals(map.get(s2Array[i]))){
                      stack.pop();
                }else{
                    return false;
                }
            }
        }
        
        if(stack.isEmpty()){
            return true;
        }
        return false;
        
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章