1class Solution {2public int numPermsDISequence(String s) {3int length = s.length();4int mod = 1000000007;5int[] dp1 = new int[length + 1];6int[] dp2 = new int[length];7for (int j = 0; j <= length; j++) {8dp1[j] = 1;9}10for (int i = 0; i < length; i++) {11if (s.charAt(i) == 'I') {12for (int j = 0, curr = 0; j < length - i; j++) {13dp2[j] = curr = (curr + dp1[j]) % mod;14}15} else {16for (int j = length - i - 1, curr = 0; j >= 0; j--) {17dp2[j] = curr = (curr + dp1[j + 1]) % mod;18}19}20dp1 = Arrays.copyOf(dp2, length);21}22return dp1[0];23}24}