美文网首页
leetcode--20--有效的括号

leetcode--20--有效的括号

作者: minningl | 来源:发表于2020-04-19 18:27 被阅读0次

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

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

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

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

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

    示例 5:

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

    链接:https://leetcode-cn.com/problems/valid-parentheses

    思路:
    1、定义一个列表。遍历整个字符串,如果当前字符和列表顶部的元素匹配,则将列表顶部的元素pop出去,否则将其插入这个列表中

    Python代码:

    class Solution(object):
        def isValid(self, s):
            """
            :type s: str
            :rtype: bool
            """
            dt = {}
            dt[')'] = '('
            dt[']'] = '['
            dt['}'] = '{'
            ls = []
    
            for item in s:
                item = item.encode('utf-8')
                if not ls:
                    ls.append(item)
                    continue
                if item in dt and dt[item]==ls[-1]:
                    ls.pop()
                else:
                    ls.append(item)
            return len(ls)==0
    

    C++代码:

    class Solution {
    public:
        bool isValid(string s) {
            map<char, char> dt;
            dt[')'] = '(';
            dt[']'] = '[';
            dt['}'] = '{';
            vector<char> vc;
    
            for (char item:s){
                if(vc.size()==0){
                    vc.push_back(item);
                    continue;
                }
                if(dt.find(item)!=dt.end() && dt[item]==vc.back()){
                    vc.pop_back();
                }else{
                    vc.push_back(item);
                }
            }
            return vc.size()==0;
        }
    };
    

    思路2:
    1、递归的遍历整个字符串,将字符串中的 '()' '[]' '{}' 全都替换为空串,看看字符串s最后是否变成了空串

    Python代码:

    class Solution(object):
        def isValid(self, s):
            """
            :type s: str
            :rtype: bool
            """
            while '()' in s or '[]' in s or '{}' in s:
                s = s.replace('()','')
                s = s.replace('[]','')
                s = s.replace('{}','')
            return len(s)==0
    

    相关文章

      网友评论

          本文标题:leetcode--20--有效的括号

          本文链接:https://www.haomeiwen.com/subject/gfhbbhtx.html