LeetCode每日一题 001 有效的括号

1、解题思路

从前往后,依次看每个括号字符能否找到匹配的另一半(规则是就近配对),只要某一个括号字符找到了另一半就将这一对括号从字符串序列里移除,剩下的字符串序列再做配对。

这种方式下,只要尚未配对的括号字符都要进行记录,以参与后续的配对。未配对记录(入栈),配对移除(出栈)这个过程和栈的入栈出栈操作是一致的了,因此可以用栈来解决。

2、有效题解

bool isMatchedChars(char left, char right)
{
    return (left == '(' && right == ')')
        || (left == '{' && right == '}')
        || (left == '[' && right == ']');
    
}
bool isValid(char* s) {
    if (NULL == s)
    {
        return false;
    }
    if (*s == '\0')
    {
        return true;
    }
    
    char stack[10000] = {0};
    int count = 1;
    stack[0] = *s;
    char *p = s;
    while (*p != '\0' && *(p + 1) != '\0')
    {
        if (count == 0 || !isMatchedChars(stack[count-1], *(p+1)))
        {
            stack[count] = *(p+1);
            count++;
        }
        else
        {
            stack[count-1] = 0;
            count--;
        }
        
        p++; 
    }
    return count == 0;
}

3、小结

配对问题借助栈解决有很好的效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值