Skip to content

Commit 5b62f50

Browse files
authored
Create 2060-check-if-an-original-string-exists-given-two-encoded-strings.js
1 parent 365dd79 commit 5b62f50

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* @param {string} s1
3+
* @param {string} s2
4+
* @return {boolean}
5+
*/
6+
var possiblyEquals = function (s1, s2) {
7+
let n = s1.length
8+
let m = s2.length
9+
const f = Array.from({ length: 41 }, () =>
10+
Array.from({ length: 41 }, () => Array(1001).fill(false))
11+
)
12+
f[0][0][1000] = true
13+
14+
for (let i = 0; i <= n; i++)
15+
for (let j = 0; j <= m; j++)
16+
for (let k = 0; k < 2000; k++) {
17+
if (!f[i][j][k]) continue
18+
// if k==1000 means length diff is 0, so check both next charactors.
19+
if (i + 1 <= n && j + 1 <= m && k == 1000 && s1[i] == s2[j]) {
20+
f[i + 1][j + 1][k] = true
21+
}
22+
// if first string is longer or same length, extend second string.
23+
if (k >= 1000 && j + 1 <= m) {
24+
if (s2[j] >= 'a' && s2[j] <= 'z') {
25+
// do not extend to be a longer string using a-z.
26+
if (k > 1000) {
27+
f[i][j + 1][k - 1] = true
28+
}
29+
} else if (s2[j] > '0') {
30+
let cur = 0
31+
for (let r = j; r < m; r++) {
32+
if (s2[r] >= '0' && s2[r] <= '9') {
33+
cur = cur * 10 + (s2[r] - '0')
34+
f[i][r + 1][k - cur] = true
35+
} else break
36+
}
37+
}
38+
}
39+
// if second string is longer or same length, extend first string.
40+
if (k <= 1000 && i + 1 <= n) {
41+
if (s1[i] >= 'a' && s1[i] <= 'z') {
42+
if (k < 1000) {
43+
f[i + 1][j][k + 1] = true
44+
}
45+
} else if (s1[i] > '0') {
46+
let cur = 0
47+
for (let r = i; r < n; r++) {
48+
if (s1[r] >= '0' && s1[r] <= '9') {
49+
cur = cur * 10 + (s1[r] - '0')
50+
f[r + 1][j][k + cur] = true
51+
} else break
52+
}
53+
}
54+
}
55+
}
56+
return f[n][m][1000]
57+
}

0 commit comments

Comments
 (0)