问题求解: 求最长括号子序列 思路: 左括号入栈 遇到右括号出栈 借助辅助数组定义一个与字符串长度相同得数组初始化为零
#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++; } }关于c++中栈库的使用