zoukankan      html  css  js  c++  java
  • 46.Valid Parentheses

    1. Valid Parentheses My Submissions QuestionEditorial Solution
      Total Accepted: 106346 Total Submissions: 361674 Difficulty: Easy
      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.

    思路:
    经典的括号匹配问题
    沿用严奶奶的书的描述来说,
    [ ( [ ] [ ] ) ]
    1 2 3 4 5 6 7 8

    计算机接受了第一个字符,本来期待 第8个的出现,结果2号出现了,那么现在便期待第7号的出现,。。。。,依次类推,当2号的需求满足了,便满足1的需求,也就是说期待值是随着左括号的增加一直在变的,类似于栈先进入的元素出栈优先级更低,开始的优先级慢慢降低,这就是栈的思想。

    辣么,程序就可以写出来了。。

    注意栈是一种经典的数据结构,在面试中常会遇到这样的问题,需要解释清楚:

    从本质来说,栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

    class Solution {
    public:
        bool isValid(string s) {
            stack<char> s_stack;
            map<char,char> mp;
            mp['(']=')';mp['{']='}';mp['[']=']';
            for(int i=0;i<s.size();++i)
            {
                if(s[i]=='('||s[i]=='{'||s[i]=='[')
                    s_stack.push(s[i]);
                else  {
                        if(s_stack.empty())return false;//如果栈为空,遇到右括号
                        else if(!s_stack.empty()&&s[i]==mp[s_stack.top()])s_stack.pop();//如果不空,栈顶元素是右括号匹配的,弹出栈顶元素
                        else return false;//不空又不匹配,说明该右括号首次出现并无匹配或者出现错了时机,如([),((]
    
                }
            }
            if(s_stack.empty())return true;
            else return false;
        }
    };
  • 相关阅读:
    .NETCore 之 中间件 02
    .NETCore 之 中间件 01
    .NetCore 之AOP扩展ExceptionFilter
    Unity ICO
    CentOS7离线安装Mysql8.0
    CentOS7离线安装devtoolset-9并编译redis6.0.5
    Centos7离线安装gcc4.8
    C#进行图片压缩(对jpg压缩效果最好)
    实现ASP.Net Core3.1运行在DockeDesktop下并用Nginx实现负载均衡
    WPF实现TextBlock呼吸灯效果
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482920.html
Copyright © 2011-2022 走看看