[LeetCode]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.

這一題是典型的使用壓棧的方式解決的問題,題目中還有一種valid情況沒有說明,需要我們自己考慮的,就是"({[]})"這種層層嵌套但

以完全匹配的,也是valid的一種。解題思路是這樣的:我們對字符串S中的每一個字符C,如果C不是右括號,就壓入棧stack中。

如果C是右括號,判斷stack是不是空的,空則說明沒有左括號,直接返回not valid,非空就取出棧頂的字符pre來對比,如果是匹配

的,棧頂的字符,繼續取S中的下一個字符;如果不匹配,說明不是valid的,直接返回。當我們遍歷了一次字符串S後,注意

這裏還有種情況,就是stack中還有殘留的字符沒有得到匹配,即此時stack不是空的,這時說明S不是valid的,因爲只要valid,一

定全都可以到匹配使左括號彈出。


以下是我的代碼,歡迎各位大牛指導交流~

AC,Runtime: 4 ms

//LeetCode_Valid Parentheses
//Written by Zhou
//2013.12.28

class Solution {
public:
    bool isValid(string s) {
        
        stack<char> charStack;
        size_t i = 0;
        
        while(i != s.length())
        {
            char c = s[i];
            if (c != ')' && c != '}' && c != ']')
            {
                charStack.push(c);
            }
            else
            {
                if (charStack.size() == 0)
                   return false;

                char pre = charStack.top();
                switch(c)
                {
                case ')':
                    if (pre == '(')
                      charStack.pop();
                    else 
                      return false;
                    break;
                      
                case '}':
                    if (pre == '{')
                      charStack.pop();
                    else 
                      return false;
                    break;
                    
                case ']':
                    if (pre == '[')
                      charStack.pop();
                    else 
                      return false;
                    break;
                }
            }
            ++i;
        }
        if (charStack.size() == 0)
           return true;
        else return false;
    }
};


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