《LeetBook》leetcode題解(20):Valid Parentheses[E]——棧解決括號匹配問題

我如今在作一個叫《leetbook》的免費開源書項目,力求提供最易懂的中文思路,目前把解題思路都同步更新到gitbook上了,須要的同窗能夠去看看
書的地址:https://hk029.gitbooks.io/leetbook/
java

這裏寫圖片描述

20. Valid Parentheses

問題

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

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

思路

這道題很簡單,就是一個經典的棧的例子——表達式中的括號符號匹配。
- 碰見了左括號就進棧
- 碰見了右括號就出棧
- 若是棧爲空,出錯
- 若是出棧元素不是匹配的括號,出錯spa

這裏解決出括號匹配用了一個小tick,就是利用ASCII碼,匹配的括號的ascii碼都不會相差太遠
- ‘(’ ‘)’ 相差1
- ‘[’ ‘]’ ‘{’ ‘}’ 相差2code

public class Solution {
    public boolean isValid(String s) {
        if(s.length() == 0)
            return false;
        Stack<Character> stack = new Stack<Character>(); // 建立堆棧對象 
        for(int i = 0;i < s.length(); i++)
        {
            if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{')
                stack.push(s.charAt(i));
            if(s.charAt(i) == ')' || s.charAt(i) == ']' || s.charAt(i) == '}')
            {
                if(stack.empty()) return false;
                char out = stack.pop();
                if(out - s.charAt(i) > 2)
                    return false;
            }
        }
        if(stack.empty())
            return true;
        return false;
    }
}
相關文章
相關標籤/搜索