【leetcode】20. Valid Parentheses(Python & C++)

51 篇文章 1 订阅
50 篇文章 28 订阅

20. Valid Parentheses

题目链接

20.1 题目描述:

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.

20.2 解题思路:

  1. 思路一:利用栈。遍历字符串,每次遇到左括号时,就入栈,遇到右括号时,判断栈为空或者栈顶字符与此时的右括号不匹配,则返回FALSE,否则,出栈。遍历结束,如果栈为空,则返回true,否则为false。

  2. 思路二:分c++和Python。

    • c++:同思路一一样,不同的是写法上做了调整,没有使用if,而是用了switch。
    • Python:利用字典,原理一样,不过写法上更简洁。

20.3 C++代码:

1、思路一代码(3ms):

class Solution107_0 {
public:
    bool isValid(string s) {
        if (s.length() < 2 || s.length() % 2 == 1 || s[0] == ')' || s[0] == ']' || s[0] == '}')
            return false;
        stack<char>v;
        for (int i = 0; i < s.length(); i++)
        {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{')
            {
                v.push(s[i]);
            }
            if (s[i] == ')' || s[i] == ']' || s[i] == '}')
            {
                char temp = v.top();
                v.pop();
                if ((s[i] == ')' && temp == '(') || (s[i] == ']' && temp == '[') || (s[i] == '}' && temp == '{'))
                    continue;
                else
                    return false;
            }
        }
        return v.empty();
    }
};

2、思路二代码(3ms):

class Solution107_1 {
public:
    bool isValid(string s) {
        if (s.length() < 2 || s.length() % 2 == 1 || s[0] == ')' || s[0] == ']' || s[0] == '}')
            return false;
        stack<char>v;
        for (int i = 0; i < s.length();i++)
        {
            switch (s[i])
            {
            case '(':
            case '[':
            case '{':
                v.push(s[i]); break;
            case ')':
                if (v.empty() || v.top() != '(')
                    return false;
                else
                    v.pop();
                break;
            case ']':
                if (v.empty() || v.top() != '[')
                    return false;
                else
                    v.pop();
                break;
            case '}':
                if (v.empty() || v.top() != '{')
                    return false;
                else
                    v.pop();
                break;
            }
        }
        return v.empty();
    }
};

20.4 Python代码:

1、思路一代码(39ms):

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        v=[]
        a=['(','{','[']
        for i in range(len(s)):
            if s[i] in a:
                v.append(s[i])
                continue
            elif s[i]==')':
                if len(v)==0 or v.pop()!='(':
                    return False
            elif s[i]==']':
                if len(v)==0 or v.pop()!='[':
                    return False           
            elif s[i]=='}':
                if len(v)==0 or v.pop()!='{':
                    return False         
        return len(v)==0

2、思路二代码(49ms)

class Solution1(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        v=[]
        d={']':'[',')':'(','}':'{'}
        for i in range(len(s)):
            if s[i] in d.values():
                v.append(s[i])
            elif s[i] in d.keys():
                if len(v)==0 or d[s[i]]!=v.pop():
                    return False
        return len(v)==0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值