class Solution {
public:
bool makePalindrome(string s) {
}
};
2330. 有效的回文 IV
给你一个下标从 0 开始、仅由小写英文字母组成的字符串 s
。在一步操作中,你可以将 s
中的任一字符更改为其他任何字符。
如果你能在 恰 执行一到两步操作后使 s
变成一个回文,则返回 true
,否则返回 false
。
示例 1:
输入: s = "abcdba" 输出: true 解释: 能让 s 变成回文,且只用了一步操作的方案如下: - 将 s[2] 变成 'd' ,得到 s = "abddba" 。 执行一步操作让 s 变成一个回文,所以返回 true 。
示例 2:
输入: s = "aa" 输出: true 解释: 能让 s 变成回文,且只用了两步操作的方案如下: - 将 s[0] 变成 'b' ,得到 s = "ba" 。 - 将 s[1] 变成 'b' ,得到s = "bb" 。 执行两步操作让 s 变成一个回文,所以返回 true 。
示例 3:
输入: s = "abcdef" 输出: false 解释: 不存在能在两步操作以内将 s 变成回文的办法,所以返回 false 。
提示:
1 <= s.length <= 105
s
仅由小写英文字母组成原站题解
golang 解法, 执行用时: 4 ms, 内存消耗: 3.3 MB, 提交时间: 2023-10-16 21:55:57
func makePalindrome(s string) bool { count:=0 for i:=0;i< len(s)/2;i++{ if s[i] != s[len(s)-i-1]{ count++ } } return count <=2 }
rust 解法, 执行用时: 4 ms, 内存消耗: 2.4 MB, 提交时间: 2023-10-16 21:55:39
impl Solution { pub fn make_palindrome(s: String) -> bool { let chars: Vec<char> = s.chars().collect(); let len = s.len(); let half = len / 2; let (mut low, mut high) = if len % 2 == 0 { (half - 1, half) } else { (half - 1, half + 1) }; let mut changed = 0; while low >= 0 && high < len { if chars[low] != chars[high] { changed += 1; } if changed == 3 { return false; } high += 1; low -= 1; } true } }
java 解法, 执行用时: 3 ms, 内存消耗: 42.3 MB, 提交时间: 2023-10-16 21:55:10
class Solution { public boolean makePalindrome(String s) { int need = 0; int l=0,r=s.length()- 1; while(l < r) { if (s.charAt(l) != s.charAt(r)) { need += 1; } l += 1; r -= 1; } return need <= 2; } }
python3 解法, 执行用时: 60 ms, 内存消耗: 16.6 MB, 提交时间: 2023-10-16 21:54:54
class Solution: def makePalindrome(self, s: str) -> bool: need = 0 l,r = 0,len(s) - 1 while l < r: if s[l] != s[r]: need += 1 l += 1 r -= 1 return True if need <= 2 else False