跳至主要內容

括号配对

yczha大约 1 分钟Algorithmleetcodeleetcode括号配对C++Python

Leetcode算法练习第四十题:括号配对

问题描述

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

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

示例 5:

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

解法

使用一个栈来存储,每当遇到匹配的括号则弹出头元素,最终判断栈是否为空。

Python

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)==0:
            return True
        if len(s)%2!=0 or s[0] in ')]}':
            return False
        S=[]
        pair={'(':')',')':'(','[':']',']':'[','{':'}','}':'{'}
        for c in s:
            if len(S)==0:
                S.append(c)
                continue
            if S[-1]!=pair[c]:
                S.append(c)
            else:
                S.pop()
        return len(S)==0

C++

static const auto io_sync_off=[](){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    bool isValid(string s) {
        if(s.size()==0)return true;
        if(s.size()%2==1)return false;
        stack<char> S;
        for(int i=0;i<s.size();i++){
            if(S.empty()){
                S.push(s.at(i));
                continue;
            }
            char last=S.top();
            char curr=s.at(i);
            switch(last){
                case '(':
                    if(curr!=')')
                        S.push(curr);
                    else
                        S.pop();
                    break;
                case '[':
                    if(curr!=']')
                        S.push(curr);
                    else
                        S.pop();
                    break;
                case '{':
                    if(curr!='}')
                        S.push(curr);
                    else
                        S.pop();
                    break;
                default:
                    S.push(curr);
            }
        }
        return S.empty()?true:false;
    }
};