1. 程式人生 > >20. Valid Parentheses(python+cpp)

20. Valid Parentheses(python+cpp)

題目:

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

解釋: 看到這種括號匹配的問題,就應該直接想到棧哦~ 需要用到字典,注意把右括號當做是鍵哦~ python程式碼:

class Solution(object):
    def isValid(self, s):
""" :type s: str :rtype: bool """ if len(s)%2!=0: return False _dict={')':'(',']':'[','}':'{'} stack=[] for char in s: if char not in _dict: stack.append(char) else: if
stack==[] or _dict[char]!=stack.pop() : return False return stack==[]

c++程式碼:

#include<map>
#include<stack>
using namespace std;
class Solution {
public:
    bool isValid(string s) {
        map<char,char>_map;
        stack<char>_stack;
        _map[')']='(';
        _map[']']='[';
        _map['}']='{';
        for(auto letter:s)
        {
            if(!_map.count(letter))
                _stack.push(letter);
            else
            {
                if (_stack.empty())
                    return false;
                char tmp=_stack.top();
                _stack.pop();
                if (tmp!=_map[letter])
                    return false;
            }     
        }
        return _stack.empty();
    }
};

總結: 看到括號匹配的問題就想到棧和字典 就對了。