forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.java
41 lines (41 loc) · 1.26 KB
/
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
36
37
38
39
40
41
class Solution {
public String pushDominoes(String dominoes) {
int n = dominoes.length();
Deque<Integer> q = new ArrayDeque<>();
int[] time = new int[n];
Arrays.fill(time, -1);
List<Character>[] force = new List[n];
for (int i = 0; i < n; ++i) {
force[i] = new ArrayList<>();
}
for (int i = 0; i < n; ++i) {
char f = dominoes.charAt(i);
if (f != '.') {
q.offer(i);
time[i] = 0;
force[i].add(f);
}
}
char[] ans = new char[n];
Arrays.fill(ans, '.');
while (!q.isEmpty()) {
int i = q.poll();
if (force[i].size() == 1) {
ans[i] = force[i].get(0);
char f = ans[i];
int j = f == 'L' ? i - 1 : i + 1;
if (j >= 0 && j < n) {
int t = time[i];
if (time[j] == -1) {
q.offer(j);
time[j] = t + 1;
force[j].add(f);
} else if (time[j] == t + 1) {
force[j].add(f);
}
}
}
}
return new String(ans);
}
}