问题求解:
求最长括号子序列
思路:
左括号入栈 遇到右括号出栈 借助辅助数组定义一个与字符串长度相同得数组初始化为零
#include<bits/stdc++.h>
using namespace std;
int flag[100005];
char s[100005];
stack<int>astack;
int main()
{
int len=0;int max=0;
int count=0;
int n;
int i,j;
cin>>s;
n=strlen(s);
for(i=0;i<n;i++)
{
if(s[i]=='(')
{
astack.push(i);
}
else if(s[i]==')'&&!astack.empty())
{
j=astack.top();
astack.pop();
flag[i]=1;
flag[j]=1;
}
}
~~//最长字串~~ //错误代码 原因:数组为01111110111111 最后一个6字串长度没有算进去 原因:以0为字串结束标志
for(i=0;i<n;i++)
{
if(flag[i]==1)
{
len++;
}
else
{
if(max==len)
{
count++;
}
else if(max<len)
{
max=len;
count=1;
}
len=0;
}
}
cout<<max<<endl;
cout<<count;
}
正确代码:长度+1就更新max大小
for (i = 0; i < n; i++) {
if (flag[i] == 1)
{
len++;
}
else
{
len = 0;
}
if (len > max)
{
max = len;
count = 1;
}
else if (len == max)
{
count++;
}
}