[20] Valid Parentheses

1. 題目描述

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

給定一個字符串,判斷字符串中包含的三種括號’(’ / ‘[’ / ‘{‘是否是成對的。

2. 解題思路

判斷括號是否成對使用一個棧即可。當括號爲左括號的時候入棧,右括號的時候出棧判斷是否匹配。但是其中還是有兩個坑,有坑就是因爲一開始沒想清楚就寫代碼(piapiapia該打)。一個就是當輸入一堆右括號的時候,出棧要判斷棧是否爲空。另一個就是當輸入一堆左括號的時候,如果出棧完成還有左括號在棧裏那麼也是不匹配的,如({{()[{}]這樣子的,最後棧裏還留下了({{,他並不是一個滿足要求的輸入。

3. Code

import java.util.Stack;

public class Solution {
    public boolean isValid(String s) {
        Stack<Integer> brackets = new Stack<>();
        // 判斷一下是不是奇數長度,如果是,肯定不是一個正確結果
        if(s.length()%2 != 0) return false;
        for(int i = 0; i < s.length(); ++i)
        {
            char curc = s.charAt(i);
            if(isLeft(curc)) brackets.push((int)curc);
            else
            {
                // 坑1:}])...
                if(brackets.isEmpty()) return false;
                if(curc == ')')
                {
                    if(brackets.pop() != '(') return false;
                }
                else if(curc == ']')
                {
                    if(brackets.pop() != '[') return false;
                }
                else if(curc == '}')
                {
                    if(brackets.pop() != '{') return false;
                }
                else
                {
                    return false;
                }
            }
        }
        // 坑2: {([...
        if(brackets.isEmpty()) return true;
        return false;
    }

    private boolean isLeft(char c)
    {
        return c == '(' || c == '[' || c == '{';
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章