20. 有效的括号

2022-08-07,

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
①左括号必须用相同类型的右括号闭合。
②左括号必须以正确的顺序闭合。
③注意空字符串可被认为是有效字符串。

解题思路 ❤

方法为:栈存左括号

① 奇数可以直接判断为错误;
② 别忘了边界情况,第一个就为有右括号;
③ 以及!!java自带栈功能,别忘了!!
④ (以及,不要忘记c怎么求数组长度了…strlen(s)… )

JAVA代码(白痴写法)

class Solution {
    public boolean isValid(String s) {
        if(s.length() % 2 != 0) return false;
        char stack[] = new char[100000];
        int top = -1;
        for (int i=0 ; i<s.length() ; i++){
            char c = s.charAt(i);
            if(c=='(' || c=='{' || c=='[') 
                stack[++top] = c;
            else {
                if(top==-1) return false; // 这句边界情况不能忘!!!
                if(c==')'){
                    if(stack[top]=='(')top--;
                    else return false;
                }
                if(c=='}'){
                    if(stack[top]=='{')top--;
                    else return false;
                }
                if(c==']'){
                    if(stack[top]=='[')top--;
                    else return false;
                }
            }
        }
        if(top==-1) return true;
        else return false;
    }
}

JAVA代码(自带stack写法)

class Solution {
    public boolean isValid(String s) {
        if(s.length() % 2 != 0) return false;
        Stack<Character> stack = new Stack<>(); // 现成的栈
        for (int i=0 ; i<s.length() ; i++){
            char c = s.charAt(i);
            if(c=='(' || c=='{' || c=='[') 
                stack.push(c);
            else {
                if(stack.empty()) return false; 
                char peek = stack.peek();
                if((c==')' && peek=='(') || (c=='}' && peek=='{') || (c==']' && peek=='['))
                    stack.pop();  // 写到一堆
                else return false;
            }
        }
        return stack.empty();
    }
}

C代码(白痴写法)

bool isValid(char * s){
    if(strlen(s) % 2 != 0) return false; // 忘记怎么求长度了......
    char stack[100000];
    int top=-1;
    for( int i=0 ; i<strlen(s); i++){
        char c = s[i];
        if(c=='(' || c=='[' || c=='{') stack[++top] = c;
        else {
            if(top==-1) return false;
            char tmp = stack[top];
            if((c==')' && tmp=='(') || (c=='}' && tmp=='{') || (c==']' && tmp=='['))
                top--;
            else return false;
        }
    }
    return top==-1;
}

本文地址:https://blog.csdn.net/StickTo_IT/article/details/107290484

《20. 有效的括号.doc》

下载本文的Word格式文档,以方便收藏与打印。