思路:

  • 根据样例分析,容易得知,右括号匹配左括号的不同方式跟左括号的个数有关。
  • 有三个左括号即可随机匹配三种左括号...以此类推。
  • 题目保证输入的字符串是合法的,那么第一个一定是左括号“(”
  • 循环判断,当遇到“(”时候左括号计数+1,当遇到“)”时,先计算能有多少种匹配方法(与左括号数有关),再删除一个左括号,左括号计数-1。
  • 最后求模,最好每次算method的时候都求下模。
import java.util.Scanner;
public class Main{
    public static void main(String arg[]){
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        long num_zuo=1,method=1;
        for(int i=1;i<str.length();i++){
            if(str.charAt(i)=='('){
                num_zuo++;
            }else{
                method*=num_zuo;
                method%=1000000007;
                num_zuo--;
            }
        }
        System.out.print(method%1000000007);
    }
}