From ec7f7d3cca05c2682341ffc8b245f15a5111349b Mon Sep 17 00:00:00 2001 From: yanglbme Date: Sat, 21 Sep 2024 10:13:56 +0800 Subject: [PATCH] feat: add solutions to lc problem: No.1957 No.1957.Delete Characters to Make Fancy String --- .../README.md | 62 ++++++++++++------- .../README_EN.md | 62 ++++++++++++------- .../Solution.cpp | 7 ++- .../Solution.go | 8 +-- .../Solution.java | 7 +-- .../Solution.php | 16 ++--- .../Solution.py | 7 +-- .../Solution.ts | 10 +++ 8 files changed, 114 insertions(+), 65 deletions(-) create mode 100644 solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.ts diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/README.md b/solution/1900-1999/1957.Delete Characters to Make Fancy String/README.md index 3092d6b382469..5811b0e2fbf46 100644 --- a/solution/1900-1999/1957.Delete Characters to Make Fancy String/README.md +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/README.md @@ -70,7 +70,13 @@ tags: -### 方法一 +### 方法一:模拟 + +我们可以遍历字符串 $s$,并使用一个数组 $\textit{ans}$ 记录当前的答案。对于每一个字符 $c$,如果 $\textit{ans}$ 的长度小于 $2$ 或者 $\textit{ans}$ 的最后两个字符不等于 $c$,我们就将 $c$ 添加到 $\textit{ans}$ 中。 + +最后,我们将 $\textit{ans}$ 中的字符连接起来,就得到了答案。 + +时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $s$ 的长度。 @@ -81,10 +87,9 @@ class Solution: def makeFancyString(self, s: str) -> str: ans = [] for c in s: - if len(ans) > 1 and ans[-1] == ans[-2] == c: - continue - ans.append(c) - return ''.join(ans) + if len(ans) < 2 or ans[-1] != c or ans[-2] != c: + ans.append(c) + return "".join(ans) ``` #### Java @@ -95,10 +100,9 @@ class Solution { StringBuilder ans = new StringBuilder(); for (char c : s.toCharArray()) { int n = ans.length(); - if (n > 1 && ans.charAt(n - 1) == c && ans.charAt(n - 2) == c) { - continue; + if (n < 2 || c != ans.charAt(n - 1) || c != ans.charAt(n - 2)) { + ans.append(c); } - ans.append(c); } return ans.toString(); } @@ -114,8 +118,9 @@ public: string ans = ""; for (char& c : s) { int n = ans.size(); - if (n > 1 && ans[n - 1] == c && ans[n - 2] == c) continue; - ans.push_back(c); + if (n < 2 || ans[n - 1] != c || ans[n - 2] != c) { + ans += c; + } } return ans; } @@ -128,16 +133,29 @@ public: func makeFancyString(s string) string { ans := []rune{} for _, c := range s { - n := len(ans) - if n > 1 && ans[n-1] == c && ans[n-2] == c { - continue + if n := len(ans); n < 2 || c != ans[n-1] || c != ans[n-2] { + ans = append(ans, c) } - ans = append(ans, c) } return string(ans) } ``` +#### TypeScript + +```ts +function makeFancyString(s: string): string { + const ans: string[] = []; + for (const c of s) { + const n = ans.length; + if (n < 2 || c !== ans[n - 1] || c !== ans[n - 2]) { + ans.push(c); + } + } + return ans.join(''); +} +``` + #### PHP ```php @@ -147,15 +165,17 @@ class Solution { * @return String */ function makeFancyString($s) { - $rs = ''; - for ($i = 0; $i < strlen($s); $i++) { - if ($s[$i] == $s[$i + 1] && $s[$i] == $s[$i + 2]) { - continue; - } else { - $rs .= $s[$i]; + $ans = []; + $length = strlen($s); + + for ($i = 0; $i < $length; $i++) { + $n = count($ans); + if ($n < 2 || $s[$i] !== $ans[$n - 1] || $s[$i] !== $ans[$n - 2]) { + $ans[] = $s[$i]; } } - return $rs; + + return implode('', $ans); } } ``` diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/README_EN.md b/solution/1900-1999/1957.Delete Characters to Make Fancy String/README_EN.md index ab45eafdca3d7..074212e7ac5ec 100644 --- a/solution/1900-1999/1957.Delete Characters to Make Fancy String/README_EN.md +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/README_EN.md @@ -68,7 +68,13 @@ No three consecutive characters are equal, so return "aabaa". -### Solution 1 +### Solution 1: Simulation + +We can traverse the string $s$ and use an array $\textit{ans}$ to record the current answer. For each character $c$, if the length of $\textit{ans}$ is less than $2$ or the last two characters of $\textit{ans}$ are not equal to $c$, we add $c$ to $\textit{ans}$. + +Finally, we concatenate the characters in $\textit{ans}$ to get the answer. + +The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the length of the string $s$. @@ -79,10 +85,9 @@ class Solution: def makeFancyString(self, s: str) -> str: ans = [] for c in s: - if len(ans) > 1 and ans[-1] == ans[-2] == c: - continue - ans.append(c) - return ''.join(ans) + if len(ans) < 2 or ans[-1] != c or ans[-2] != c: + ans.append(c) + return "".join(ans) ``` #### Java @@ -93,10 +98,9 @@ class Solution { StringBuilder ans = new StringBuilder(); for (char c : s.toCharArray()) { int n = ans.length(); - if (n > 1 && ans.charAt(n - 1) == c && ans.charAt(n - 2) == c) { - continue; + if (n < 2 || c != ans.charAt(n - 1) || c != ans.charAt(n - 2)) { + ans.append(c); } - ans.append(c); } return ans.toString(); } @@ -112,8 +116,9 @@ public: string ans = ""; for (char& c : s) { int n = ans.size(); - if (n > 1 && ans[n - 1] == c && ans[n - 2] == c) continue; - ans.push_back(c); + if (n < 2 || ans[n - 1] != c || ans[n - 2] != c) { + ans += c; + } } return ans; } @@ -126,16 +131,29 @@ public: func makeFancyString(s string) string { ans := []rune{} for _, c := range s { - n := len(ans) - if n > 1 && ans[n-1] == c && ans[n-2] == c { - continue + if n := len(ans); n < 2 || c != ans[n-1] || c != ans[n-2] { + ans = append(ans, c) } - ans = append(ans, c) } return string(ans) } ``` +#### TypeScript + +```ts +function makeFancyString(s: string): string { + const ans: string[] = []; + for (const c of s) { + const n = ans.length; + if (n < 2 || c !== ans[n - 1] || c !== ans[n - 2]) { + ans.push(c); + } + } + return ans.join(''); +} +``` + #### PHP ```php @@ -145,15 +163,17 @@ class Solution { * @return String */ function makeFancyString($s) { - $rs = ''; - for ($i = 0; $i < strlen($s); $i++) { - if ($s[$i] == $s[$i + 1] && $s[$i] == $s[$i + 2]) { - continue; - } else { - $rs .= $s[$i]; + $ans = []; + $length = strlen($s); + + for ($i = 0; $i < $length; $i++) { + $n = count($ans); + if ($n < 2 || $s[$i] !== $ans[$n - 1] || $s[$i] !== $ans[$n - 2]) { + $ans[] = $s[$i]; } } - return $rs; + + return implode('', $ans); } } ``` diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.cpp b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.cpp index 50ea680f32aec..79416b151e375 100644 --- a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.cpp +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.cpp @@ -4,9 +4,10 @@ class Solution { string ans = ""; for (char& c : s) { int n = ans.size(); - if (n > 1 && ans[n - 1] == c && ans[n - 2] == c) continue; - ans.push_back(c); + if (n < 2 || ans[n - 1] != c || ans[n - 2] != c) { + ans += c; + } } return ans; } -}; \ No newline at end of file +}; diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.go b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.go index 2d0923dd4d33c..b472925d7fd9e 100644 --- a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.go +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.go @@ -1,11 +1,9 @@ func makeFancyString(s string) string { ans := []rune{} for _, c := range s { - n := len(ans) - if n > 1 && ans[n-1] == c && ans[n-2] == c { - continue + if n := len(ans); n < 2 || c != ans[n-1] || c != ans[n-2] { + ans = append(ans, c) } - ans = append(ans, c) } return string(ans) -} \ No newline at end of file +} diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.java b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.java index b456f7b5834e6..0947382c03255 100644 --- a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.java +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.java @@ -3,11 +3,10 @@ public String makeFancyString(String s) { StringBuilder ans = new StringBuilder(); for (char c : s.toCharArray()) { int n = ans.length(); - if (n > 1 && ans.charAt(n - 1) == c && ans.charAt(n - 2) == c) { - continue; + if (n < 2 || c != ans.charAt(n - 1) || c != ans.charAt(n - 2)) { + ans.append(c); } - ans.append(c); } return ans.toString(); } -} \ No newline at end of file +} diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.php b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.php index ad55dfce7a289..41b56186c248a 100644 --- a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.php +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.php @@ -4,14 +4,16 @@ class Solution { * @return String */ function makeFancyString($s) { - $rs = ''; - for ($i = 0; $i < strlen($s); $i++) { - if ($s[$i] == $s[$i + 1] && $s[$i] == $s[$i + 2]) { - continue; - } else { - $rs .= $s[$i]; + $ans = []; + $length = strlen($s); + + for ($i = 0; $i < $length; $i++) { + $n = count($ans); + if ($n < 2 || $s[$i] !== $ans[$n - 1] || $s[$i] !== $ans[$n - 2]) { + $ans[] = $s[$i]; } } - return $rs; + + return implode('', $ans); } } diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.py b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.py index 13200f885b1c2..76eb795267313 100644 --- a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.py +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.py @@ -2,7 +2,6 @@ class Solution: def makeFancyString(self, s: str) -> str: ans = [] for c in s: - if len(ans) > 1 and ans[-1] == ans[-2] == c: - continue - ans.append(c) - return ''.join(ans) + if len(ans) < 2 or ans[-1] != c or ans[-2] != c: + ans.append(c) + return "".join(ans) diff --git a/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.ts b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.ts new file mode 100644 index 0000000000000..8a5edf3b949c9 --- /dev/null +++ b/solution/1900-1999/1957.Delete Characters to Make Fancy String/Solution.ts @@ -0,0 +1,10 @@ +function makeFancyString(s: string): string { + const ans: string[] = []; + for (const c of s) { + const n = ans.length; + if (n < 2 || c !== ans[n - 1] || c !== ans[n - 2]) { + ans.push(c); + } + } + return ans.join(''); +}