【每日算法】AB3 有效括号序列

代码

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param s string字符串
 * @return bool布尔型
 */
#include<string.h>

struct stack {
    int size;
    int top;
    char data[10001];
} stack;

void init(struct stack* sk) {
    sk->top = 0;
    sk->size = 0;
}

void push(struct stack* sk, char a) {
    sk->data[sk->top] = a;
    sk->size ++;
    sk->top ++;
}

char top(struct stack* sk) {
    return sk->data[sk->top - 1];
}

char pop(struct stack* sk) {
    sk->size --;
    sk->top --;
    return sk->data[sk->top];
}

bool isValid(char* s ) {
    int len = strlen(s);
    printf("len:%d\n", len);
    int point = 0;
    struct stack sk;
    init(&sk);
    for (int i = 0; i < len; i ++) {
        printf("round %d\n", i);
        switch(s[i]){
            case '(':
            case '[':
            case '{':
                push(&sk, s[i]);
                printf("push %c\n", s[i]);
                break;
            case ')':
                if(sk.size == 0 || top(&sk) != '('){
                    return false;
                }
                pop(&sk);
                printf("pop %c\n", s[i]);
                break;
            case ']':
                if(sk.size == 0 || top(&sk) != '['){
                    printf("sk.size %d top %c\n", sk.size, top(&sk));
                    return false;
                }
                printf("pop %c\n", s[i]);
                pop(&sk);
                break;
            case '}':
                if(sk.size == 0 || top(&sk) != '{'){
                    return false;
                }
                printf("pop %c\n", s[i]);
                pop(&sk);
                break;
            default:
                printf("unexpected\n");
                break;
        }
    }
    if (sk.size != 0) {
        return false;
    }
    return true;
}

思路

遍历字符数组,如果是 ‘(’ / ‘[’ / ‘{’,就压入栈中,如果是 ‘)’ / ‘]’ / ‘}’,若判断栈为空 / 栈顶不是对应的符号,返回false
遍历结束后,若栈为空,返回true,否则返回false

复习知识点

  1. C中用char*表示字符串,string库提供了一系列操作字符串的函数
    字符串的比较:strcmp
    字符串的长度:strlen
  2. printf打印单个字符:%c

总结

思路很简单,就是一些很基础的知识忘记了,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值