Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit d7348ee

Browse files
authoredNov 22, 2021
Update 2060-check-if-an-original-string-exists-given-two-encoded-strings.js
1 parent 8f5595b commit d7348ee

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
 

‎2060-check-if-an-original-string-exists-given-two-encoded-strings.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,64 @@
1+
function possiblyEquals(s1, s2) {
2+
const n = s1.length, m = s2.length;
3+
const dp = Array.from({ length: n + 1 }, v => Array.from({ length: m + 1}, w => new Set()));
4+
dp[0][0].add(0);
5+
6+
for (let i = 0; i <= n; i++) {
7+
for (let j = 0; j <= m; j++) {
8+
for (let delta of dp[i][j]) {
9+
// s1 is number
10+
let num = 0;
11+
if (delta <= 0) {
12+
for (let p = i; i < Math.min(i + 3, n); p++) {
13+
if (isDigit(s1[p])) {
14+
num = num * 10 + Number(s1[p]);
15+
dp[p + 1][j].add(delta + num);
16+
} else {
17+
break;
18+
}
19+
}
20+
}
21+
22+
// s2 is number
23+
num = 0;
24+
if (delta >= 0) {
25+
for (let q = j; q < Math.min(j + 3, m); q++) {
26+
if (isDigit(s2[q])) {
27+
num = num * 10 + Number(s2[q]);
28+
dp[i][q + 1].add(delta - num);
29+
} else {
30+
break;
31+
}
32+
}
33+
}
34+
35+
// match s1 non-digit character
36+
if (i < n && delta < 0 && !isDigit(s1[i])) {
37+
dp[i + 1][j].add(delta + 1);
38+
}
39+
40+
// match s2 non-digit character
41+
if (j < m && delta > 0 && !isDigit(s2[j])) {
42+
dp[i][j + 1].add(delta - 1);
43+
}
44+
45+
// two non-digit character match
46+
if (i < n && j < m && delta == 0 && s1[i] == s2[j]) {
47+
dp[i + 1][j + 1].add(0);
48+
}
49+
50+
}
51+
}
52+
}
53+
return dp[n][m].has(0);
54+
};
55+
56+
function isDigit(char) {
57+
return (/^\d{1}$/g).test(char);
58+
}
59+
60+
// another
61+
162
/**
263
* @param {string} s1
364
* @param {string} s2

0 commit comments

Comments
 (0)
Please sign in to comment.