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

来源:互联网 发布:顶尖数据恢复软件破解 编辑:程序博客网 时间:2024/05/17 09:16

    • Valid Parentheses
      • 题意
      • 注意
      • 思路
      • 代码
      • 结果

20. Valid Parentheses

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.

题意

给定一个字符串仅仅包含’(‘, ‘)’, ‘{‘, ‘}’, ‘[‘,’]’六个字符,来判断输入是否有效
判定的规则就是,左括号必须匹配右括号

注意

如 ”()” , “()[]{}” 是合法的
如 “(]”,”([)]” 是非法的
注意特殊情况,当只有右括号作为输入,此时栈为空

思路

遍历字符串,当遇到左括号,压入栈中,遇到右括号弹出一个栈顶元素,将右括号转换为对应的左括号,和栈顶元素作为判断。相等继续,不相等返回false。
当输入‘(’‘[’‘{’‘}’,最终栈里元素还有剩下,循环已经完成,此时应该返回false。

代码

class Solution {public:    bool isValid(string s) {        stack<char> sta;        for(int i=0;i<s.size();i++)        {            if(s[i]=='('||s[i]=='['||s[i]=='{')            {                sta.push(s[i]);            }            else            {                char temp = s[i];                switch(temp)                {                    case ')':                        temp = '(';                        break;                    case ']':                        temp = '[';                        break;                    case '}':                        temp = '{';                        break;                    default:                        return false;                }                //对栈取栈顶元素弹出操作需要检查其有效性                if (sta.size()==0)                {                    return false;                }                char top = sta.top();                sta.pop();                if(top != temp)                {                    return false;                }            }        }        //当最后的栈不为空也返回false        if(sta.size() != 0)        {            return false;        }        return true;    }};

结果

这里写图片描述