comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
中等 |
1473 |
第 18 场双周赛 Q2 |
|
给你一个由小写英文字母组成的回文字符串 palindrome
,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典序最小 ,且 不是 回文串。
请你返回结果字符串。如果无法做到,则返回一个 空串 。
如果两个字符串长度相同,那么字符串 a
字典序比字符串 b
小可以这样定义:在 a
和 b
出现不同的第一个位置上,字符串 a
中的字符严格小于 b
中的对应字符。例如,"abcc”
字典序比 "abcd"
小,因为不同的第一个位置是在第四个字符,显然 'c'
比 'd'
小。
示例 1:
输入:palindrome = "abccba" 输出:"aaccba" 解释:存在多种方法可以使 "abccba" 不是回文,例如 "zbccba", "aaccba", 和 "abacba" 。 在所有方法中,"aaccba" 的字典序最小。
示例 2:
输入:palindrome = "a" 输出:"" 解释:不存在替换一个字符使 "a" 变成非回文的方法,所以返回空字符串。
提示:
1 <= palindrome.length <= 1000
palindrome
只包含小写英文字母。
我们先判断字符串的长度是否为
否则,我们从左到右遍历字符串的前半部分,找到第一个不为 'a'
的字符,将其改为 'a'
即可。如果不存在这样的字符,那么我们将最后一个字符改为 'b'
即可。
时间复杂度
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)
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);
}
}
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;
}
};
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)
}
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('');
}