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

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

    有效字符串需满足:

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

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

    自己算法思路:首先判断字符串是否为空,如果为空,直接认为是有效字符串,返回true;然后利用stack的数据结构来解题,逐个判断字符串,如果是左括号,就打入栈中,如果是右括号,判断栈是否为空,为空则返回false,再判断栈顶是不是对应的左括号,如果是,则将栈顶的元素出栈,如果不是,则返回false。

    bool isValid(string s)
    {
        if(s.empty()) return true;
        stack<char> sta;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='(' || s[i]=='[' || s[i]=='{')
            {
                sta.push(s[i]);
            }
            else if(sta.empty())
            {
                return false;
            }
            else if((s[i] == ')' && sta.top()=='(') ||(s[i] == ']' && sta.top()=='[')||(s[i] == '}' && sta.top()=='{'))
            {
                sta.pop();
            }
            else
                return false;
        }
        if(sta.empty())
            return true;
        else
            return false;
    }

    算法缺陷:因为每次只打入左括号,如果第一个就是右括号,则要先判断栈是否为空,否则访问栈顶元素则会出错。这样判断情况太多,不够简洁。

    bool isValid(string s) {
            stack<char> result;  
            int n=s.size();  
            if(n==0) return true;  
         for(int i=0;i<n;i++)  
                {  
                    if(result.empty())  
                        result.push(s[i]);  
                    else if(result.top()=='('&&s[i]==')'||  
                          result.top()=='['&&s[i]==']'||  
                          result.top()=='{'&&s[i]=='}')   
                            result.pop();  
                    else  
                        result.push(s[i]);  
                      
                }  
                return result.empty(); 
        }

    只要栈中的元素为空,就入栈,而且栈顶和目前的元素无法配对的时候,同样打入栈中,这样避免了一开始就是右括号,不入栈,接下来要访问栈顶的尴尬,其余思路和上面的一样,最后只需要判断栈中是不是为空就好了。

  • 相关阅读:
    2014.5.20知识点学习:void及void指针含义的深刻解析(转载)
    2014.5.20知识点学习:void与void*(转载)
    2014.5.19知识点学习:上下文切换
    编写“全选”按钮来操作大量复选框
    排序算法(冒泡排序,选择排序,插入排序,快速排序)
    算法基础
    Git &GitHub
    flask 上下文管理 &源码剖析
    rest-framework框架的基本组件
    Django的FBV和CB
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8963720.html
Copyright © 2011-2022 走看看