1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+5; 4 int dp[N];//dp[i]表示以i结尾的最长合法串长度; dp[i]转移,考虑当前i为')' 栈里只压入'('则dp[i]=dp[j-1]+i-j+1;j-1如果合法那么可以合并 5 int main() 6 { 7 string s; 8 cin>>s; 9 int ans=0,cnt=1; 10 stack<int>st; 11 int n=s.size(); 12 memset(dp,0,sizeof(dp)); 13 for(int i=0;i<n;i++) 14 { 15 if(s[i]=='(')st.push(i); 16 else 17 { 18 if(st.size()) 19 { 20 int j=st.top(); 21 st.pop(); 22 dp[i]=dp[j-1]+i-j+1; 23 if(dp[i]==ans)cnt++; 24 else if(dp[i]>ans) 25 { 26 ans=dp[i]; 27 cnt=1; 28 } 29 } 30 } 31 } 32 cout<<ans<<" "<<cnt; 33 return 0; 34 }