Leetcode 每日刷题 --左右括号匹配

https://leetcode.com/problems/valid-parentheses/submissions/880634555/

2023/01/18, 虽迟但到,喜欢的朋友可以点赞关注,感谢支持~~~

问题描述:

给定字符串,检查括号是否匹配,例如:{}(){}, yes, {([])}, yes, {[)}, no,

结题思路:

  1. 此题思路比较简单明确,使用stack, 是左括号时入栈,右括号时出栈并检查是否匹配,

  1. 字符串扫描完需要检查栈是否为空,空代表完全匹配,

  1. leetcode C语言,C++ 尽量不要用全局变量,否则容易出现Testcase 能过,sumbit 不能过

答案C语言版本(为了满足第3条,代码涨的比较丑,还请见谅)

void push(char *stack_buf, uint32_t *used_stack, char str)
{
    stack_buf[*used_stack] = str;
    *used_stack += 1;
}

char pop(char *stack_buf, uint32_t *used_stack)
{
    *used_stack -= 1;
    return stack_buf[*used_stack];
}

bool stack_empty(char *stack_buf, uint32_t *used_stack)
{
    return *used_stack < 1 ? true : false;
}

bool parenthes_match(char a, char b)
{
    if ((a == '(' && b == ')')
        || (a == '[' && b == ']')
            || (a == '{' && b == '}'))
            return true;

    return false;
}

bool isValid(char * s) {
    char stack_buf[10000] = {0};
    uint32_t used_stack = 0;

    for (uint32_t i = 0; i < strlen(s); i++) {
        switch (s[i]) {
        case '[':
        case '(':
        case '{':
            push(stack_buf, &used_stack, s[i]);
            break;
        default:
            if (stack_empty(stack_buf, &used_stack)
                || !parenthes_match(pop(stack_buf, &used_stack), s[i]))
                return false;
            break;
        }
    }

    return stack_empty(stack_buf, &used_stack);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值