题解 | #有效括号序列#

有效括号序列

http://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

import java.util.*;

public class Solution {

public boolean isValid (String s) {

    // write code here
    //方法一 普通方法
    int lb = 0,len=s.length();//lb是未匹配的前缀个数
    HashSet<Character> set = new HashSet<>();
    for(int i=0;i<len;++i){
        char c = s.charAt(i);
        if(c=='(' ||c=='['||c=='{'){
            lb++;
            if(!set.contains(c))
                set.add(c);
        } else if(c==')' ||c==']'||c=='}'){
            if(c==')' && (!set.contains('(') || i>0&&(s.charAt(i-1)=='['||s.charAt(i-1)=='{'))) 
               return false;
            if(c==']' && (!set.contains('[') || i>0&&(s.charAt(i-1)=='('||s.charAt(i-1)=='{'))) 
               return false;
            if(c=='}' && (!set.contains('{') || i>0&&(s.charAt(i-1)=='('||s.charAt(i-1)=='[')))
               return false;
            if(lb==0)
               return false;
            lb--;
        }
    }
    if(lb!=0)
        return false;
    return true;
    
    //方法二 栈
    Stack<Character> stk = new Stack<>();
    for(int i=0;i<s.length();++i){
        char c = s.charAt(i);
        if(c=='(' || c=='[' || c=='{')
            stk.push(c);
        else if(!stk.isEmpty() &&((c==')'&&stk.peek()=='(') || (c==']'&&stk.peek()=='[') || (c=='}'&&stk.peek()=='{'))){
            stk.pop();
        } else{
            return false;
        }
    }
    if(stk.isEmpty())
        return true;
    return false;
}

}

阿勇算法解集 文章被收录于专栏

对一些基础的,经典的题目的算法题解,每道题的题解尽量做到一题多解,举一反三。其中每一个题解中,若是参考了其他牛人的想法,我会备注出来。

全部评论

相关推荐

仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
05-07 19:10
已编辑
中国科学技术大学 C++
silly01:现在先去 momenta,8-9月去鹅找日常实习,八股文算法背好了你这随便进。不过建议补充一下后端知识,MySQL、Redis看下八股,再补个6824,加点go后台的技术栈,9月随便进大厂。CPP后端只能来WXG
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务