diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README.md b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README.md index 8f7bb20b8ac7a..b4da39eab1a07 100644 --- a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README.md +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README.md @@ -176,7 +176,7 @@ function minimumDeletions(s: string): number { const f = new Array(n + 1).fill(0); let b = 0; for (let i = 1; i <= n; ++i) { - if (s.charAt(i - 1) === 'b') { + if (s[i - 1] === 'b') { f[i] = f[i - 1]; ++b; } else { @@ -187,6 +187,29 @@ function minimumDeletions(s: string): number { } ``` +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + const n = s.length; + const f = new Array(n + 1).fill(0); + let b = 0; + for (let i = 1; i <= n; ++i) { + if (s[i - 1] === 'b') { + f[i] = f[i - 1]; + ++b; + } else { + f[i] = Math.min(f[i - 1] + 1, b); + } + } + return f[n]; +}; +``` + @@ -275,11 +298,10 @@ func minimumDeletions(s string) int { ```ts function minimumDeletions(s: string): number { - const n = s.length; - let ans = 0, - b = 0; - for (let i = 0; i < n; ++i) { - if (s.charAt(i) === 'b') { + let [ans, b] = [0, 0]; + + for (const ch of s) { + if (ch === 'b') { ++b; } else { ans = Math.min(ans + 1, b); @@ -289,6 +311,27 @@ function minimumDeletions(s: string): number { } ``` +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + let [ans, b] = [0, 0]; + + for (const ch of s) { + if (ch === 'b') { + ++b; + } else { + ans = Math.min(ans + 1, b); + } + } + return ans; +}; +``` + @@ -379,24 +422,90 @@ func minimumDeletions(s string) int { ```ts function minimumDeletions(s: string): number { - let lb = 0, - ra = 0; - const n = s.length; - for (let i = 0; i < n; ++i) { - if (s.charAt(i) === 'a') { - ++ra; - } + let ra = [...s].reduce((acc, x) => (x === 'a' ? acc + 1 : acc), 0); + let lb = 0; + + let ans = s.length; + for (const ch of s) { + if (ch === 'a') ra--; + ans = Math.min(ans, lb + ra); + if (ch === 'b') lb++; } - let ans = n; - for (let i = 0; i < n; ++i) { - ra -= s.charAt(i) === 'a' ? 1 : 0; + return ans; +} +``` + +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + let ra = [...s].reduce((acc, x) => (x === 'a' ? acc + 1 : acc), 0); + let lb = 0; + + let ans = s.length; + for (const ch of s) { + if (ch === 'a') ra--; ans = Math.min(ans, lb + ra); - lb += s.charAt(i) === 'b' ? 1 : 0; + if (ch === 'b') lb++; } return ans; +}; +``` + + + + + + + +### Solution 4: Stack + + + +#### TypeScript + +```ts +function minimumDeletions(s: string): number { + const stk: string[] = []; + let res = 0; + + for (const ch of s) { + if (stk.at(-1) === 'b' && ch === 'a') { + stk.pop(); + res++; + } else stk.push(ch); + } + + return res; } ``` +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + const stk = []; + let res = 0; + + for (const ch of s) { + if (stk.at(-1) === 'b' && ch === 'a') { + stk.pop(); + res++; + } else stk.push(ch); + } + + return res; +}; +``` + diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README_EN.md b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README_EN.md index 70df45432b4e7..b3716da42bbe1 100644 --- a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README_EN.md +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/README_EN.md @@ -174,7 +174,7 @@ function minimumDeletions(s: string): number { const f = new Array(n + 1).fill(0); let b = 0; for (let i = 1; i <= n; ++i) { - if (s.charAt(i - 1) === 'b') { + if (s[i - 1] === 'b') { f[i] = f[i - 1]; ++b; } else { @@ -185,6 +185,29 @@ function minimumDeletions(s: string): number { } ``` +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + const n = s.length; + const f = new Array(n + 1).fill(0); + let b = 0; + for (let i = 1; i <= n; ++i) { + if (s[i - 1] === 'b') { + f[i] = f[i - 1]; + ++b; + } else { + f[i] = Math.min(f[i - 1] + 1, b); + } + } + return f[n]; +}; +``` + @@ -273,11 +296,10 @@ func minimumDeletions(s string) int { ```ts function minimumDeletions(s: string): number { - const n = s.length; - let ans = 0, - b = 0; - for (let i = 0; i < n; ++i) { - if (s.charAt(i) === 'b') { + let [ans, b] = [0, 0]; + + for (const ch of s) { + if (ch === 'b') { ++b; } else { ans = Math.min(ans + 1, b); @@ -287,13 +309,34 @@ function minimumDeletions(s: string): number { } ``` +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + let [ans, b] = [0, 0]; + + for (const ch of s) { + if (ch === 'b') { + ++b; + } else { + ans = Math.min(ans + 1, b); + } + } + return ans; +}; +``` + -### Solution 3 +### Solution 3: Two-Variable Method @@ -377,24 +420,90 @@ func minimumDeletions(s string) int { ```ts function minimumDeletions(s: string): number { - let lb = 0, - ra = 0; - const n = s.length; - for (let i = 0; i < n; ++i) { - if (s.charAt(i) === 'a') { - ++ra; - } + let ra = [...s].reduce((acc, x) => (x === 'a' ? acc + 1 : acc), 0); + let lb = 0; + + let ans = s.length; + for (const ch of s) { + if (ch === 'a') ra--; + ans = Math.min(ans, lb + ra); + if (ch === 'b') lb++; } - let ans = n; - for (let i = 0; i < n; ++i) { - ra -= s.charAt(i) === 'a' ? 1 : 0; + return ans; +} +``` + +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + let ra = [...s].reduce((acc, x) => (x === 'a' ? acc + 1 : acc), 0); + let lb = 0; + + let ans = s.length; + for (const ch of s) { + if (ch === 'a') ra--; ans = Math.min(ans, lb + ra); - lb += s.charAt(i) === 'b' ? 1 : 0; + if (ch === 'b') lb++; } return ans; +}; +``` + + + + + + + +### Solution 4: Stack + + + +#### TypeScript + +```ts +function minimumDeletions(s: string): number { + const stk: string[] = []; + let res = 0; + + for (const ch of s) { + if (stk.at(-1) === 'b' && ch === 'a') { + stk.pop(); + res++; + } else stk.push(ch); + } + + return res; } ``` +#### JavaScript + +```js +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + const stk = []; + let res = 0; + + for (const ch of s) { + if (stk.at(-1) === 'b' && ch === 'a') { + stk.pop(); + res++; + } else stk.push(ch); + } + + return res; +}; +``` + diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution.js b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution.js new file mode 100644 index 0000000000000..be8720c89781e --- /dev/null +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution.js @@ -0,0 +1,18 @@ +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + const n = s.length; + const f = new Array(n + 1).fill(0); + let b = 0; + for (let i = 1; i <= n; ++i) { + if (s[i - 1] === 'b') { + f[i] = f[i - 1]; + ++b; + } else { + f[i] = Math.min(f[i - 1] + 1, b); + } + } + return f[n]; +}; diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution.ts b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution.ts index 9800753821a5d..db2e4b1872fb3 100644 --- a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution.ts +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution.ts @@ -3,7 +3,7 @@ function minimumDeletions(s: string): number { const f = new Array(n + 1).fill(0); let b = 0; for (let i = 1; i <= n; ++i) { - if (s.charAt(i - 1) === 'b') { + if (s[i - 1] === 'b') { f[i] = f[i - 1]; ++b; } else { diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution2.js b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution2.js new file mode 100644 index 0000000000000..8a53f2b5e23ed --- /dev/null +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution2.js @@ -0,0 +1,16 @@ +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + let [ans, b] = [0, 0]; + + for (const ch of s) { + if (ch === 'b') { + ++b; + } else { + ans = Math.min(ans + 1, b); + } + } + return ans; +}; diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution2.ts b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution2.ts index 35cdc37e29f98..bc0de452db101 100644 --- a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution2.ts +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution2.ts @@ -1,9 +1,8 @@ function minimumDeletions(s: string): number { - const n = s.length; - let ans = 0, - b = 0; - for (let i = 0; i < n; ++i) { - if (s.charAt(i) === 'b') { + let [ans, b] = [0, 0]; + + for (const ch of s) { + if (ch === 'b') { ++b; } else { ans = Math.min(ans + 1, b); diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution3.js b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution3.js new file mode 100644 index 0000000000000..09f2888076802 --- /dev/null +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution3.js @@ -0,0 +1,16 @@ +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + let ra = [...s].reduce((acc, x) => (x === 'a' ? acc + 1 : acc), 0); + let lb = 0; + + let ans = s.length; + for (const ch of s) { + if (ch === 'a') ra--; + ans = Math.min(ans, lb + ra); + if (ch === 'b') lb++; + } + return ans; +}; diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution3.ts b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution3.ts index 0364c8ddafe8c..07f6bfcd39a00 100644 --- a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution3.ts +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution3.ts @@ -1,17 +1,12 @@ function minimumDeletions(s: string): number { - let lb = 0, - ra = 0; - const n = s.length; - for (let i = 0; i < n; ++i) { - if (s.charAt(i) === 'a') { - ++ra; - } - } - let ans = n; - for (let i = 0; i < n; ++i) { - ra -= s.charAt(i) === 'a' ? 1 : 0; + let ra = [...s].reduce((acc, x) => (x === 'a' ? acc + 1 : acc), 0); + let lb = 0; + + let ans = s.length; + for (const ch of s) { + if (ch === 'a') ra--; ans = Math.min(ans, lb + ra); - lb += s.charAt(i) === 'b' ? 1 : 0; + if (ch === 'b') lb++; } return ans; } diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution4.js b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution4.js new file mode 100644 index 0000000000000..1a14076942427 --- /dev/null +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution4.js @@ -0,0 +1,17 @@ +/** + * @param {string} s + * @return {number} + */ +var minimumDeletions = function (s) { + const stk = []; + let res = 0; + + for (const ch of s) { + if (stk.at(-1) === 'b' && ch === 'a') { + stk.pop(); + res++; + } else stk.push(ch); + } + + return res; +}; diff --git a/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution4.ts b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution4.ts new file mode 100644 index 0000000000000..e1531241673d9 --- /dev/null +++ b/solution/1600-1699/1653.Minimum Deletions to Make String Balanced/Solution4.ts @@ -0,0 +1,13 @@ +function minimumDeletions(s: string): number { + const stk: string[] = []; + let res = 0; + + for (const ch of s) { + if (stk.at(-1) === 'b' && ch === 'a') { + stk.pop(); + res++; + } else stk.push(ch); + } + + return res; +}