刷leetcode第9天

1、有效的括号

【题目】

【分析】

法1:数组模拟栈:

遍历输入的字符串,使用一个栈来存储左括号,遇到右括号判断和栈顶的左括号是否匹配,匹配就将栈顶元素弹出,不匹配直接返回false。遍历完成后,如果栈是空的,则匹配成功,返回true,否则返回false。

【代码】C

bool isValid(char * s){
    char stack[10000];  // 预留栈空间
    int top = 0;        // 栈顶指针
    for (int i = 0; s[i] != '\0'; i++) {
        if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
            // 左括号压栈
            stack[top++] = s[i];
        } else {
            // 判断栈是否空
            if (top == 0) return false;
            // 左右括号判断是否匹配
            switch (stack[top - 1]) {
            case '(':
                if (s[i] == ')') top--; else return false;
                break;
            case '[':
                if (s[i] == ']') top--; else return false;
                break;
            case '{':
                if (s[i] == '}') top--; else return false;
                break;
            }
        }
    }
    // 判断栈是否空
    return top == 0;
}

法2:

利用互相匹配的括号其ascii的值不超过2
首先利用strlen函数求出字符串长度
定义一个长度为(strlen+1)的栈,加一是方便栈顶指针操作。
定义栈顶指针top
如果是左括号,进栈
否则的话如果栈非空并且是优括号的的话,出栈
否则return false
循环结束之后,如果栈说明括号匹配成功

【代码】C

bool isValid(char * s){
    int length = strlen(s);
    int stk[length+1];
    int top =0;
    if(length % 2 == 1){
        return false;
    }
    for(int i=0;i<length;i++){
        if(s[i]=='('||s[i]=='{'||s[i]=='['){
            stk[top] = s[i];
            top++;
        }
        else if(top!=0 && abs(s[i]-stk[top-1]) <= 2 ){
            top--;
        }else{
            return false;
        }
    }
    return top==0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值