1. 程式人生 > >leetcode-20:Valid Parentheses有效的括號(括號匹配)

leetcode-20:Valid Parentheses有效的括號(括號匹配)

題目:

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

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true

Example 2:

Input: "()[]{}"
Output: true

Example 3:

Input: "(]"
Output: false

Example 4:

Input: "([)]"
Output: false

Example 5:

Input: "{[]}"
Output: true

給定一個只包括 '('')''{''}''['']'

 的字串,判斷字串是否有效。

有效字串需滿足:

  1. 左括號必須用相同型別的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

 思路:借用棧。若為({[則入棧,若當前元素為})],看當前棧是否為空並與對應括號匹配, 不匹配返回false,匹配就出棧。知道最終棧為空。

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;
        for(int i=0;i<s.size();++i)
        {
            if(s[i]=='('||s[i]=='{'||s[i]=='[') stk.push(s[i]);
            else
            {
                if(stk.empty() ||(s[i]==')'&&stk.top()!='(') ||
                  (s[i]=='}'&&stk.top()!='{') || (s[i]==']'&&stk.top()!='[') )
                    return false;
                stk.pop();
            }
        }
        return stk.empty();
    }
};