-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy path936-Stamping-The-Sequence.js
43 lines (37 loc) · 1.03 KB
/
936-Stamping-The-Sequence.js
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
42
43
/**
* @param {string} stamp
* @param {string} target
* @return {number[]}
*/
const movesToStamp = (stamp, target) => {
const result = [];
const stampArr = stamp.split('');
const targetArr = target.split('');
const stampLen = stamp.length;
const targetLen = target.length;
const traverse = (idx) => {
let visited = true;
for (let i = 0; i < stampLen; i += 1) {
if (stampArr[i] !== targetArr[idx + i] && targetArr[idx + i] !== '?') {
visited = false;
break;
}
}
if (visited) {
result.push(idx);
for (let i = 0; i < stampLen; i += 1) {
targetArr[idx + i] = '?';
}
}
};
for (let i = 0; i < targetLen - stampLen + 1; i += 1) {
traverse(i);
}
for (let i = targetLen - stampLen; i >= 0; i -= 1) {
traverse(i);
}
if (targetArr.join('') !== Array(targetLen).fill('?').join('')) {
return [];
}
return result.reverse();
};