LeetCode20:Valid Parentheses

原创 2015年07月11日 00:02:15

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.

Hide Tags Stack String

这道题是检验输入的字符串是否符合规则,因为这是stack里的一道题目,所以一开始就是冲着如何用栈来求解这个问题。
最开始想的是将字符串中的元素全部插入栈中,然后再找出判断规则,很快就发现行不通,因为栈无法进行遍历操作,它只提供有限的几个进栈出栈的函数,然后顺着栈能进行的操作思考是不是在将字符串中的数据入栈的过程中就能进行判断呢?在纸上画了下草图发现真可以,每当遍历到一个元素时将它与栈顶元素进行判断,如果它和栈顶元素匹配,那么将栈顶元素弹出,否则将它入栈。比如说对于输入”([])”,一开始:(“进栈,然后由于”[“与”(“不匹配所以也进栈,然后遍历到”]”,由于”]”与栈顶元素”[“匹配所以”[“出栈,这样一直遍历下去。。。。
runtime:0ms

class Solution {
public:
    bool isValid(string s) {
        stack<char> datas;
        for(int i=0;i<s.size();i++)
        {
            if(datas.empty())
                datas.push(s[i]);
            else
            {
                if(com(datas.top(),s[i]))
                    datas.pop();
                else
                    datas.push(s[i]);
            }
        }
        return datas.empty();
    }

    bool com(char lhs,char rhs)
    {
        if(lhs=='('&&rhs==')')
            return true;
        if(lhs=='['&&rhs==']')
            return true;
        if(lhs=='{'&&rhs=='}')
            return true;
        return false;
    }
};

在Discuss中看到了另外一种实现,基本思路和我上面也是一样的,但是它的匹配不是像上面定义一个cmp函数,而是通过switch语句进行的,感觉也蛮不错的,所以也按照它的思路实现了一遍:

 bool isValid(string s) {
        stack<int> data;
        for(int c:s)
        {
            switch(c)
            {
                case '(':
                case '[':
                case '{':data.push(c); break;
                case ')':
                {
                    if(data.empty()||data.top()!='(')
                        return false;
                    else
                    {
                        data.pop();
                        break;
                    }
                }
                case ']':
                {
                    if(data.empty()||data.top()!='[')
                        return false;
                    else
                    {
                        data.pop();
                        break;
                    }
                }
                case '}':
                {
                    if(data.empty()||data.top()!='{')
                        return false;
                    else
                    {
                        data.pop();
                        break;
                    }
                }

            }
        }
        return data.empty();


    }

Valid Parentheses 判断括号组合是否有效@LeetCode

package Level2; import java.util.Stack; /** * * Valid Parentheses * * Given a string containi...
  • hellobinfeng
  • hellobinfeng
  • 2013年10月25日 02:16
  • 6135

【LeetCode-面试算法经典-Java实现】【022-Generate Parentheses(生成括号)】

【022-Generate Parentheses(生成括号)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given n pairs of parentheses, ...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月23日 07:52
  • 2363

使用#pragma阻止一些warnings

这篇博客的内容都是记的网上的。是流水账。只是记录下来以便日后之有,避免每次重新google。 #pragma除了可以用来把不同功能的代码进行分隔组织外还可以用来disable一些warnings。这...
  • iunion
  • iunion
  • 2015年08月27日 12:40
  • 2927

LeetCode OJ 20 Valid Parentheses [Easy]

LeetCode OJ 20 Valid Parentheses 题目描述: Given a string containing just thecharacters '(', ')', '{', ...
  • qq_20745131
  • qq_20745131
  • 2017年07月11日 21:56
  • 145

leetcode20:Valid Parentheses

Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and']',...
  • GODBAR
  • GODBAR
  • 2016年12月22日 21:58
  • 190

LeetCode 20. Valid Parentheses 辅助数据结构栈

Valid Parentheses 题意 注意 思路 代码 结果20. Valid Parentheses Given a string containing just the character...
  • wys2011101169
  • wys2011101169
  • 2017年05月24日 11:34
  • 177

Leetcode20: Valid Parentheses

这题的答题思路基本是对了,用字典来解决,不过,还是没有对stack的应用太熟悉,还需练习。 class Solution(object): def isValid(self, s):...
  • bestallen
  • bestallen
  • 2016年11月26日 23:36
  • 356

LeetCode20. Valid Parentheses

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the inpu...
  • Guo_Xiaoxi
  • Guo_Xiaoxi
  • 2017年03月26日 18:53
  • 174

LeetCode 20 Valid Parentheses (C,C++,Java,Python)

Problem: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', deter...
  • runningtortoises
  • runningtortoises
  • 2015年05月10日 16:41
  • 2569

[leetcode]20. Valid Parentheses(java)

问题形容: 题目:有效括号 description: Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’...
  • mjl960108
  • mjl960108
  • 2017年01月06日 13:47
  • 156
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode20:Valid Parentheses
举报原因:
原因补充:

(最多只允许输入30个字)