leetcode做题笔记32

文章介绍了如何利用栈的特性与动态规划方法解决寻找字符串中最长有效括号子串的长度问题。思路一通过栈来跟踪左括号,遇到右括号时更新最大长度;思路二采用动态规划策略。文章强调了对栈操作的理解以及在括号匹配问题中的应用。
摘要由CSDN通过智能技术生成

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

目录

思路一:利用栈的特性解决

思路二:动态规划

做题历程:

反省:

问题:

收获:

总结:


思路一:利用栈的特性解决

先将左括号入栈,若后面栈顶为右括号则使前一个左括号出栈,最后输出最后一个右括号和栈底左括号之间的差值

#define MAX(a , b) ((a) > (b) ? (a) : (b))
int longestValidParentheses(char * s){
    int len = strlen(s);
    int max = 0;
    int str[len+1];
    int top = -1;
    str[++top] = -1;
    for(int i = 0; i < len; i++)
    {
        if(s[i] == '(')
        {
            str[++top] = i;
        }
        if(s[i] == ')')
        {
            --top;
            if(top == -1)
            {
                str[++top] = i;
            }
            else
            {
                max = MAX(max , (i - str[top]));
            }
        }
    }
    return max;
}

时间复杂度O(n),空间复杂度O(n)

思路二:动态规划

做题历程:

因为括号的特性,使用栈会比较容易解决此类问题,使用栈的时候需要用一个指针来记录栈顶,此处使用top变量,若该位置为左括号则判断前面一位是否为右括号,为右括号则top--,最后输出最长有效括号,实际编写的过程中i的取值要考虑清楚

反省:

问题:

对于栈顶的判断还需考虑清楚

收获:

对括号匹配问题思路更加明确,利用栈先进后出的特性来找到匹配的括号。

总结:

括号匹配问题与栈关联紧密,熟悉栈的操作对解决括号匹配帮助很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值