欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

20. 有效的括号

程序员文章站 2022-03-22 23:49:44
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:①左括号必须用相同类型的右括号闭合。②左括号必须以正确的顺序闭合。③注意空字符串可被认为是有效字符串。解题思路 ❤方法为:栈存左括号① 奇数可以直接判断为错误;② 别忘了边界情况,第一个就为有右括号;③ 以及!!java自带栈功能,别忘了!!④ (以及,不要忘记c怎么求数组长度了…strlen(s)… )JAVA代码(白痴写法)class Solution {...

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

解题思路 ❤

方法为:栈存左括号
20. 有效的括号
① 奇数可以直接判断为错误;
② 别忘了边界情况,第一个就为有右括号;
③ 以及!!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