zoukankan      html  css  js  c++  java
  • 423 有效的括号序列

    原题网址:https://www.lintcode.com/problem/valid-parentheses/description

    描述

    给定一个字符串所表示的括号序列,包含以下字符: '(', ')''{''}''[' and ']', 判定是否是有效的括号序列。

    您在真实的面试中是否遇到过这个题?  

    样例

    括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号。

    标签
     
    思路:利用栈先进后出、后进先出的特点进行匹配。 
    创建栈,遍历字符串。如果栈为空就把当前字符push到栈中;如果栈不为空就取出栈顶,判断当前字符是否是栈顶括号的另一半,如果是,弹出栈顶。
    全部遍历完成后,若栈为空,说明括号是匹配的(有效的),不为空说明括号是不匹配的(无效的)。
     
    注意:若字符串长度是奇数,括号一定是不匹配的。
     
    AC代码:
    class Solution {
    public:
        /**
         * @param s: A string
         * @return: whether the string is a valid parentheses
         */
        bool isValidParentheses(string &s) {
            // write your code here
         int n=s.size();
         if (n<=1||n%2==1)
         {
             return false;
         }
         stack<char> tmp;
         
         int j=0;
         while(j<n)
         {
             if (tmp.empty())
             {
                 tmp.push(s[j]);
             }
             else
             {
                 char temp=tmp.top();
                 if (rhalf(temp,s[j]))
                 {
                     tmp.pop();
                 }
                 else 
                 {
                     tmp.push(s[j]);
                 }
             } 
             j++;
         }
         if (tmp.empty())
         {
             return true;
         }
         return false;    
        
        }
        
        bool rhalf(char c1,char c2)
    {
        if (c1=='('&&c2==')')
        {
            return true;
        }
        if (c1=='['&&c2==']')
        {
            return true;
        }
        if (c1=='{'&&c2=='}')
        {
            return true;
        }
        return false;
    }
    };

     

    其他思路:
    首先我们需要知道,此题只是让我们判断括号序列是否合法,不是表达式是否合法,因此我们就假定只有括号,或者说我们只考虑括号,不考虑其他的字符。
    其次,我们知道括号是否有效:
    第一,括号要成对出现,例如出现左圆括号('(')n次,则右圆括号(')')也必须出现n次,对于方括号和花括号也是一样的;
    第二,括号可以嵌套,但是从里到外一定是满足可以成对抵消的,而不能够是错开的,这个从样例就可以看出来。

    那么我的思路就是借用栈这个数据结构来解此题。
    1. 遇到左括号,全部压入栈中;
    2. 遇到右括号,判断栈顶的元素是否是相对应的左括号,若是则弹出栈顶元素,若不是则返回false,若栈为空,也返回false; 转自此博客
     
     
    以上博客最后一句描述有错误,已经红字修改过来。
    代码可参考:
     
  • 相关阅读:
    pgspider sqlite mysql docker 镜像
    pgspider docker 镜像
    pgspider基于pg 的高性能数据可视化sql 集群引擎
    diesel rust orm 框架试用
    golang 条件编译
    Performance Profiling Zeebe
    bazel 学习一 简单java 项目运行
    一个好用node http keeplive agnet
    gox 简单灵活的golang 跨平台编译工具
    mailhog 作为smtp server mock工具
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/9224388.html
Copyright © 2011-2022 走看看