列表

详情


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 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool makePalindrome(string 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

上一题