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(); 
        }

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

  • 相关阅读:
    set用法
    01分数规划
    unique && stl的全排列
    lower_bound() && upper_bound()
    spfa判负环
    倍增求LCA
    数据生成c++程序模板
    samba
    vsftp快速配置
    grub丢失的修复
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8963720.html
Copyright © 2011-2022 走看看