zoukankan      html  css  js  c++  java
  • Leetcode 20 有效的括号valid-parentheses(栈)

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

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

    输入: "()[]{}"
    输出: true
    

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

    输入: "([)]"
    输出: false
    

    示例 5:

    输入: "{[]}"
    输出: true

    =============================================================
    基本思路其实还是比较简单的, 我刚刚开始想得就十分的复杂。。。
    首先分析一下:
    1. 左括号必须有右括号匹配,并且与其匹配的括号是同类型的;
    2. 不同类型的括号不能穿插含括,如例4,存在线性规则。

    毫无疑问要使用栈了(虽然我看到了栈的标签了ehahaha...) 

    由上面的特性就可以得到基本思路

            碰到左括号则压入栈中;

            碰到右括号,则与栈顶进行匹配,如果属于同类型,则把栈顶弹出(注意监测空栈),如果不同,return false;

            最后监测空栈,不是空栈(有括号剩余),return false;

            是空栈,return ture;

    下面是AC代码:

     1 class Solution {
     2 public:
     3     bool isValid(string s) {
     4         stack <char> mark;
     5         for(char temp :s){
     6             if (temp=='(')
     7                 mark.push(')');
     8             else if(temp=='[')
     9                 mark.push(']');
    10             else if(temp=='{')
    11                 mark.push('}');
    12             else{
    13                 if (mark.empty()||temp!=mark.top())
    14                     return false;      
    15                 else mark.pop();
    16             }
    17         }
    18         return mark.empty();
    19         }              
    20 };

     
     

  • 相关阅读:
    AtCoder Regular Contest 061
    Codeforces Round #370 (Div. 2)
    2016 ACM/ICPC Asia Regional Dalian Online
    HDU 5513 Efficient Tree
    Codeforces Round #104 (Div. 1)
    2016 Hunan Province Programming Contest
    2016 Multi-University Training Contest 7
    2016中国大学生程序设计竞赛
    聚会「AHOI 2008」
    游戏「AHOI / HNOI2018」
  • 原文地址:https://www.cnblogs.com/mckc/p/opticor.html
Copyright © 2011-2022 走看看