• 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;
        }
    };
  • 相关阅读:
    指针和引用的区别
    vs不自动退出控制台程序的办法
    ads出现村田电容电感无法仿真的问题解决(`BJT1' is an instance of an undefined model `BJTM1')
    解决浏览器跨域的几中方式
    js的事件委托机制
    let和const命令
    JavaScript中闭包的写法和作用详解
    提升HTML5的性能体验系列之五 webview启动速度优化及事件顺序解析
    提升HTML5的性能体验系列之四 使用原生UI
    提升HTML5的性能体验系列之三 流畅下拉刷新和上拉
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482920.html
Copyright © 2020-2023  润新知