import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner (System.in);
String x=in.next();
boolean vis[]=new boolean[x.length()];
int mar[]=new int[x.length()+1],cnt=0;
Stack<Node>st=new Stack<>();
for(int i=0;i<x.length();i++) {
if(x.charAt(i)=='(')st.push(new Node('(',i));
else if(x.charAt(i)==')'&&!st.isEmpty()) {
Node x1=st.pop();
vis[x1.in]=true;
vis[i]=true;
}
}
for(int i=0;i<vis.length ;i++) {
if(vis[i]==true)cnt++;
else {
mar[cnt]++;
cnt=0;
}
}
int isfind=0;
if(cnt>0)mar[cnt]++;
for(int i=vis.length;i>=0;i--)
if(mar[i]!=0&&i!=0) {
isfind=1;
System.out.println(i+" "+mar[i]);
break;
}
if(isfind==0)System.out.println(0+" "+1);
}
}
class Node{
char x;
int in;
public Node(char x, int in) {
this.x = x;
this.in = in;
}
}
思路:该题考察栈的特性,先进后出。遍历字符串,遇到 '(' 就加入到栈中,遇到 ')' 就将栈顶的 '(' 出栈,其中栈中的每个节点保存着该字符在字符串中的索引,该标记法便于知道那些字符成功参与组成括号对。