-
-
Notifications
You must be signed in to change notification settings - Fork 8.9k
/
Copy pathSolution.java
35 lines (34 loc) · 1012 Bytes
/
Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
private static final int N = 100010;
private static final int MOD = (int) 1e9 + 7;
private static long[] f = new long[N];
private static long[] g = new long[N];
static {
f[0] = 1;
f[1] = 1;
f[2] = 2;
f[3] = 4;
g[0] = 1;
g[1] = 1;
g[2] = 2;
g[3] = 4;
for (int i = 4; i < N; ++i) {
f[i] = (f[i - 1] + f[i - 2] + f[i - 3]) % MOD;
g[i] = (g[i - 1] + g[i - 2] + g[i - 3] + g[i - 4]) % MOD;
}
}
public int countTexts(String pressedKeys) {
long ans = 1;
for (int i = 0, n = pressedKeys.length(); i < n; ++i) {
int j = i;
char c = pressedKeys.charAt(i);
for (; j + 1 < n && pressedKeys.charAt(j + 1) == c; ++j)
;
int cnt = j - i + 1;
ans = c == '7' || c == '9' ? ans * g[cnt] : ans * f[cnt];
ans %= MOD;
i = j;
}
return (int) ans;
}
}