LeetCode算法题 20.有效的括号
  5PSMIrBt98OW 2023年11月02日 65 0

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。
class Solution
{
public:
    bool isValid(string s)
    {
        //创建栈
    	stack<char> st;
        //遍历字符串
        for (int i = 0; i < s.size(); i++)
        {
            //如果栈为空,则将字符放入栈中
            if (st.empty())
            {
                st.push(s[i]);
                continue;//不执行下面的语句
            }
            //字符变量top存放栈顶的字符
            //和字符串中的下一个字符一同判断括号是否是有效的
            char top = st.top();
            if (s[i] == ')' && top == '(')
            {
                //如果栈顶的字符和下一个字符对应则使栈顶元素出栈
                st.pop();
                continue;
            }
            else if (s[i] == ']' && top == '[')
            {
                st.pop();
                continue;
            }
            else if (s[i] == '}' && top == '{')
            {
                st.pop();
                continue;
            }
            //如果以上三个if都没有执行则将字符放入栈中
            st.push(s[i]);
        }
        //如果遍历完字符串栈为空则说明所有括号一一对应,判定有效
        return st.empty();//如果栈为空返回
    }
};

通过例子更好理解

输入: "{[()]}"

遍历字符串

①第一个字符'{',此时栈为空,则将'{'放入栈中





{

②第二个字符'[',此时栈顶元素为'{'与'['并不对应,则将'['放入栈中




[

{

③第三个字符为'(',栈顶元素为'['与'('不对应,放入栈中



(

[

{

④第四个元素为')',栈顶元素为'('与')'对应,则栈顶元素'('出栈




[

{

⑤第五个元素为']',栈顶元素为'['与']'对应,栈顶元素出栈





{

⑥第六个元素为'}',栈顶元素为'{'与'}'对应,栈顶元素出栈






遍历完毕,此时栈为空,所以返回true

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  xlvdqsD183Uk   2023年11月02日   57   0   0 带参数字符串命令行
  I0t3qRT6ovZX   2023年11月02日   44   0   0 bc字符串ci
5PSMIrBt98OW