求有效匹配最长括号,题目要求可以看leetcode32。
采用栈的方式求解,思路如下:
1、首先定义一个空栈,将-1置为第一个元素;
2、从给定的字符串的第一位开始匹配:
2.1、如果当前位为 '(':将当前位置索引压栈;
2.2、如果当前位为 ‘)’:将栈顶元素出栈,如果此时空栈,则将当前位置索引压栈;接下来将当前索引和栈顶元素做差,取当前差值和历史的最大差值作比较,取大值。
代码如下:
#include<iostream>
#include<string>
#include<stack>
using namespace std;
/*计算最长匹配的括号数目*/
void theLongestParentheses(string str)
{
int maxNum = 0;
int currentNum = 0;
stack<int> myStack;
myStack.push(-1);
for (unsigned int i = 0; i < str.size(); i++)
{
if(str[i]=='(')
myStack.push(i);
else
{
myStack.pop();
if (myStack.empty())
myStack.push(i);
int top = myStack.top();
currentNum = i - top;
if (currentNum > maxNum)
maxNum = currentNum;
}
}
cout << maxNum << endl;
}