From 9ab73dac4fb382c02638538ace50efc01b5ce1e1 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Sun, 23 Jul 2023 22:33:02 +0800 Subject: [PATCH] feat: add solutions to lc problem: No.1328 No.1328.Break a Palindrome --- .../1328.Break a Palindrome/README.md | 109 +++++++++++++++++- .../1328.Break a Palindrome/README_EN.md | 101 +++++++++++++++- .../1328.Break a Palindrome/Solution.cpp | 19 +++ .../1328.Break a Palindrome/Solution.go | 17 +++ .../1328.Break a Palindrome/Solution.java | 19 +++ .../1328.Break a Palindrome/Solution.py | 14 +++ .../1328.Break a Palindrome/Solution.ts | 17 +++ 7 files changed, 294 insertions(+), 2 deletions(-) create mode 100644 solution/1300-1399/1328.Break a Palindrome/Solution.cpp create mode 100644 solution/1300-1399/1328.Break a Palindrome/Solution.go create mode 100644 solution/1300-1399/1328.Break a Palindrome/Solution.java create mode 100644 solution/1300-1399/1328.Break a Palindrome/Solution.py create mode 100644 solution/1300-1399/1328.Break a Palindrome/Solution.ts diff --git a/solution/1300-1399/1328.Break a Palindrome/README.md b/solution/1300-1399/1328.Break a Palindrome/README.md index 3068b182a1f6b..64d6a9968c5a3 100644 --- a/solution/1300-1399/1328.Break a Palindrome/README.md +++ b/solution/1300-1399/1328.Break a Palindrome/README.md @@ -41,6 +41,14 @@ +**方法一:贪心** + +我们先判断字符串的长度是否为 $1$,若是则直接返回空串。 + +否则,我们从左到右遍历字符串的前半部分,找到第一个不为 `'a'` 的字符,将其改为 `'a'` 即可。如果不存在这样的字符,那么我们将最后一个字符改为 `'b'` 即可。 + +时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串的长度。 + ### **Python3** @@ -48,7 +56,20 @@ ```python - +class Solution: + def breakPalindrome(self, palindrome: str) -> str: + n = len(palindrome) + if n == 1: + return "" + s = list(palindrome) + i = 0 + while i < n // 2 and s[i] == "a": + i += 1 + if i == n // 2: + s[-1] = "b" + else: + s[i] = "a" + return "".join(s) ``` ### **Java** @@ -56,7 +77,93 @@ ```java +class Solution { + public String breakPalindrome(String palindrome) { + int n = palindrome.length(); + if (n == 1) { + return ""; + } + char[] cs = palindrome.toCharArray(); + int i = 0; + while (i < n / 2 && cs[i] == 'a') { + ++i; + } + if (i == n / 2) { + cs[n - 1] = 'b'; + } else { + cs[i] = 'a'; + } + return String.valueOf(cs); + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + string breakPalindrome(string palindrome) { + int n = palindrome.size(); + if (n == 1) { + return ""; + } + int i = 0; + while (i < n / 2 && palindrome[i] == 'a') { + ++i; + } + if (i == n / 2) { + palindrome[n - 1] = 'b'; + } else { + palindrome[i] = 'a'; + } + return palindrome; + } +}; +``` + +### **Go** + +```go +func breakPalindrome(palindrome string) string { + n := len(palindrome) + if n == 1 { + return "" + } + i := 0 + s := []byte(palindrome) + for i < n/2 && s[i] == 'a' { + i++ + } + if i == n/2 { + s[n-1] = 'b' + } else { + s[i] = 'a' + } + return string(s) +} +``` +### **TypeScript** + +```ts +function breakPalindrome(palindrome: string): string { + const n = palindrome.length; + if (n === 1) { + return ''; + } + const s = palindrome.split(''); + let i = 0; + while (i < n >> 1 && s[i] === 'a') { + i++; + } + if (i == n >> 1) { + s[n - 1] = 'b'; + } else { + s[i] = 'a'; + } + return s.join(''); +} ``` ### **...** diff --git a/solution/1300-1399/1328.Break a Palindrome/README_EN.md b/solution/1300-1399/1328.Break a Palindrome/README_EN.md index a5351b9046650..b63349f7c41ca 100644 --- a/solution/1300-1399/1328.Break a Palindrome/README_EN.md +++ b/solution/1300-1399/1328.Break a Palindrome/README_EN.md @@ -43,13 +43,112 @@ Of all the ways, "aaccba" is the lexicographically smallest. ### **Python3** ```python - +class Solution: + def breakPalindrome(self, palindrome: str) -> str: + n = len(palindrome) + if n == 1: + return "" + s = list(palindrome) + i = 0 + while i < n // 2 and s[i] == "a": + i += 1 + if i == n // 2: + s[-1] = "b" + else: + s[i] = "a" + return "".join(s) ``` ### **Java** ```java +class Solution { + public String breakPalindrome(String palindrome) { + int n = palindrome.length(); + if (n == 1) { + return ""; + } + char[] cs = palindrome.toCharArray(); + int i = 0; + while (i < n / 2 && cs[i] == 'a') { + ++i; + } + if (i == n / 2) { + cs[n - 1] = 'b'; + } else { + cs[i] = 'a'; + } + return String.valueOf(cs); + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + string breakPalindrome(string palindrome) { + int n = palindrome.size(); + if (n == 1) { + return ""; + } + int i = 0; + while (i < n / 2 && palindrome[i] == 'a') { + ++i; + } + if (i == n / 2) { + palindrome[n - 1] = 'b'; + } else { + palindrome[i] = 'a'; + } + return palindrome; + } +}; +``` + +### **Go** + +```go +func breakPalindrome(palindrome string) string { + n := len(palindrome) + if n == 1 { + return "" + } + i := 0 + s := []byte(palindrome) + for i < n/2 && s[i] == 'a' { + i++ + } + if i == n/2 { + s[n-1] = 'b' + } else { + s[i] = 'a' + } + return string(s) +} +``` +### **TypeScript** + +```ts +function breakPalindrome(palindrome: string): string { + const n = palindrome.length; + if (n === 1) { + return ''; + } + const s = palindrome.split(''); + let i = 0; + while (i < n >> 1 && s[i] === 'a') { + i++; + } + if (i == n >> 1) { + s[n - 1] = 'b'; + } else { + s[i] = 'a'; + } + return s.join(''); +} ``` ### **...** diff --git a/solution/1300-1399/1328.Break a Palindrome/Solution.cpp b/solution/1300-1399/1328.Break a Palindrome/Solution.cpp new file mode 100644 index 0000000000000..c81044f8034bd --- /dev/null +++ b/solution/1300-1399/1328.Break a Palindrome/Solution.cpp @@ -0,0 +1,19 @@ +class Solution { +public: + string breakPalindrome(string palindrome) { + int n = palindrome.size(); + if (n == 1) { + return ""; + } + int i = 0; + while (i < n / 2 && palindrome[i] == 'a') { + ++i; + } + if (i == n / 2) { + palindrome[n - 1] = 'b'; + } else { + palindrome[i] = 'a'; + } + return palindrome; + } +}; \ No newline at end of file diff --git a/solution/1300-1399/1328.Break a Palindrome/Solution.go b/solution/1300-1399/1328.Break a Palindrome/Solution.go new file mode 100644 index 0000000000000..f4ef08dd660db --- /dev/null +++ b/solution/1300-1399/1328.Break a Palindrome/Solution.go @@ -0,0 +1,17 @@ +func breakPalindrome(palindrome string) string { + n := len(palindrome) + if n == 1 { + return "" + } + i := 0 + s := []byte(palindrome) + for i < n/2 && s[i] == 'a' { + i++ + } + if i == n/2 { + s[n-1] = 'b' + } else { + s[i] = 'a' + } + return string(s) +} \ No newline at end of file diff --git a/solution/1300-1399/1328.Break a Palindrome/Solution.java b/solution/1300-1399/1328.Break a Palindrome/Solution.java new file mode 100644 index 0000000000000..f3633f37e70e4 --- /dev/null +++ b/solution/1300-1399/1328.Break a Palindrome/Solution.java @@ -0,0 +1,19 @@ +class Solution { + public String breakPalindrome(String palindrome) { + int n = palindrome.length(); + if (n == 1) { + return ""; + } + char[] cs = palindrome.toCharArray(); + int i = 0; + while (i < n / 2 && cs[i] == 'a') { + ++i; + } + if (i == n / 2) { + cs[n - 1] = 'b'; + } else { + cs[i] = 'a'; + } + return String.valueOf(cs); + } +} \ No newline at end of file diff --git a/solution/1300-1399/1328.Break a Palindrome/Solution.py b/solution/1300-1399/1328.Break a Palindrome/Solution.py new file mode 100644 index 0000000000000..457cc6c000052 --- /dev/null +++ b/solution/1300-1399/1328.Break a Palindrome/Solution.py @@ -0,0 +1,14 @@ +class Solution: + def breakPalindrome(self, palindrome: str) -> str: + n = len(palindrome) + if n == 1: + return "" + s = list(palindrome) + i = 0 + while i < n // 2 and s[i] == "a": + i += 1 + if i == n // 2: + s[-1] = "b" + else: + s[i] = "a" + return "".join(s) diff --git a/solution/1300-1399/1328.Break a Palindrome/Solution.ts b/solution/1300-1399/1328.Break a Palindrome/Solution.ts new file mode 100644 index 0000000000000..cb372b43b8e1e --- /dev/null +++ b/solution/1300-1399/1328.Break a Palindrome/Solution.ts @@ -0,0 +1,17 @@ +function breakPalindrome(palindrome: string): string { + const n = palindrome.length; + if (n === 1) { + return ''; + } + const s = palindrome.split(''); + let i = 0; + while (i < n >> 1 && s[i] === 'a') { + i++; + } + if (i == n >> 1) { + s[n - 1] = 'b'; + } else { + s[i] = 'a'; + } + return s.join(''); +}