核心思路

最多删除一个,那单数删掉最中间的字母,双数删掉中间两个字母,看剩下的是否回文即可

python实现

class Solution:
    def palindrome(self , str: str) -> bool:
        l = len(str)
        if l%2==0:
            s = str[0:(l//2)-1] + str[(l//2)+1:] #总长度为偶数,删掉中间两个字母
        else:
            s = str[0:(l//2)] + str[(l//2)+1:] # 总长度为奇数,删掉中间一个字母
        if s[0:len(s)//2] == s[len(s)//2:][::-1]:
            return True
        else:
            return False

c++实现

class Solution {
public:
    bool palindrome(string str) {
        // write code here
        int size1 = str.size();
        string new_str;
        if(size1 % 2){
            new_str = str.substr(0, (size1/2)) + str.substr((size1/2)+1, (size1/2)); //单数去掉中间的一个
        }else{
            new_str = str.substr(0, (size1/2)-1) + str.substr((size1/2)+1, size1/2);  //双数去掉中间的两个
        }
        string s2 = new_str.substr(new_str.size()/2, new_str.size()/2);
        reverse(s2.begin(), s2.end());
        if(new_str.substr(0, new_str.size()/2) == s2){
            return true;
        }else{
            return false;
        }
    }
};

双指针也可以,思路差不多,算出来两边的起止位置,一个从头开始,一个从尾开始,循环判断即可