Main.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Scanner;
  5. public class Main {
  6. private static final int MOD = 1000000007;
  7. public static void main(String[] args) {
  8. Scanner scanner = new Scanner(System.in);
  9. String s1 = scanner.nextLine();
  10. String s2 = scanner.nextLine();
  11. scanner.close();
  12. int lb = 0;
  13. char[] ch1 = s1.toCharArray();
  14. char[] ch2 = s2.toCharArray();
  15. for (char c : ch1) {
  16. lb += c == '(' ? 1 : -1;
  17. }
  18. for (char c : ch2) {
  19. lb += c == '(' ? 1 : -1;
  20. }
  21. if (lb != 0) {
  22. System.out.println(0);
  23. return;
  24. }
  25. HashMap<List<Integer>, Integer> map = new HashMap<>();
  26. int res = dfs(ch1, ch2, 0, 0, 0, map);
  27. System.out.println(res);
  28. }
  29. private static int dfs(char[] ch1, char[] ch2, int i1, int i2, int lb, HashMap<List<Integer>, Integer> map) {
  30. if (i1 == ch1.length && i2 == ch2.length) {
  31. if (lb == 0) return 1;
  32. return 0;
  33. }
  34. Integer res;
  35. List<Integer> key = new ArrayList<>();
  36. key.add(i1);
  37. key.add(i2);
  38. key.add(lb);
  39. if ((res = map.get(key)) != null) return res;
  40. res = 0;
  41. if (i1 < ch1.length) {
  42. if (ch1[i1] == '(') {
  43. res = (res + dfs(ch1, ch2, i1+1, i2, lb+1, map)) % MOD;
  44. } else if (lb != 0) {
  45. res = (res + dfs(ch1, ch2, i1+1, i2, lb-1, map)) % MOD;
  46. }
  47. }
  48. if (i2 < ch2.length) {
  49. if (ch2[i2] == '(') {
  50. res = (res + dfs(ch1, ch2, i1, i2+1, lb+1, map)) % MOD;
  51. } else if (lb != 0) {
  52. res = (res + dfs(ch1, ch2, i1, i2+1, lb-1, map)) % MOD;
  53. }
  54. }
  55. map.put(key, res);
  56. return res;
  57. }
  58. }