LeetCodeOJ. Valid Parentheses

試題請參見: https://oj.leetcode.com/problems/valid-parentheses/

題目概述

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個]時, 我們會調用stack.top()函數. 但此時堆棧爲空, 因此會出現Segment Fault異常.

源代碼

class Solution {
public:
    bool isValid(std::string s) {
        for ( auto itr = s.begin(); itr != s.end(); ++ itr ) {
            if ( *itr == '(' || *itr == '[' || *itr == '{' ) {
                st.push(*itr);
            } else if ( *itr == ')' || *itr == ']' || *itr == '}' ) {
                if ( st.empty() ) {
                    return false;
                }
                char topChar = st.top();

                if ( *itr == ')' && topChar != '(' ) {
                    return false;
                } else if ( *itr == ']' && topChar != '[' ) {
                    return false;
                } else if ( *itr == '}' && topChar != '{' ) {
                    return false;
                }
                st.pop();
            }
        }

        if ( st.empty() ) {
            return true;
        } else {
            return false;            
        }
    }
private:
    std::stack<char> st;
};
發佈了50 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章