[LeetCode.32]最长有效括号

本文介绍了一种求解字符串中最长有效括号对的方法。通过使用栈来辅助记录左括号的位置,并根据不同情况更新最大长度。具体实现分为三种情况讨论,包括栈为空、栈大小为1以及栈大小大于1时的有效括号处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:

另建一个容器栈,

遇见'(',压入

遇见')',分情况

1.容器栈为空时,continue;

2.容器栈size为1时,

                     若栈顶为'(',pop出,压入num 2;

                     若栈顶为num,pop出即可;

3.容器栈size大于1时,

                     若栈顶为'(',pop出,计num为2,再探测栈顶的数据,若为数字,计数字加2压入;

              若栈顶为num,则次栈层元素一定为'(',此时pop两次,计num加2压入,再探测栈顶的数据,若为数字,计数字加2压入

实现代码如下:

class Solution
{
public:
	int longestValidParentheses(string s)
	{
		stack<int> iStack;
		int iMax = 0;

		for (int i = 0; i<s.size(); i++)
		{
			if (s[i] == '(')
			{
				iStack.push(0);
			}
			else
			{
				if (iStack.size() == 0)
				{
					continue;
				}
				else if (iStack.size() == 1)
				{
					if (iStack.top() == 0)
					{
						iStack.pop();
						iStack.push(2);
						iMax = max(iMax, 2);
					}
                    else
                    {
                        iStack.pop();
                    }
				}
				else
				{
					if (iStack.top() == 0)
					{
						iStack.pop();
						int num = 2;
						if (iStack.top() > 0)
						{
							num += iStack.top();
							iStack.pop();
						}
						iStack.push(num);
						iMax = max(iMax, num);
					}
					else
					{
						int temp = iStack.top();
						iStack.pop();
						iStack.pop();
						temp += 2;
						if (!iStack.empty() && iStack.top() > 0)
						{
							temp += iStack.top();
							iStack.pop();
						}
						iMax = max(iMax, temp);
						iStack.push(temp);
					}
				}
			}
		}

		return iMax;
	}
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值