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

63 阅读1分钟

代码

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @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

总结

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