leetcode680 验证回文字符串 Ⅱ

本文介绍了一个算法问题,即通过删除一个字符判断字符串是否可以变为回文串。文章提供了一个C++实现方案,采用双指针法从两端向中间遍历比较字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:
输入: “aba”
输出: True
示例 2:
输入: “abca”
输出: True
解释: 你可以删除c字符。
注意:
字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

思路:
双指针从头和尾开始遍历字符串,单独设置一个遍历的函数,在主函数中不使用遍历函数进行遍历,当遇到不符合的字符时,使用函数分别遍历删除头部对应字符的剩余字符串和删除尾部对应字符的剩余字符串。

class Solution {
public:
    bool validPalindrome(string s) {
int begin,end;
begin=0;
end=s.length()-1;
while(end>0)
    {
        if(begin==end||begin>end)
        {
            return true;
        }
        else
        {
            if(s[begin]==s[end])
            {
                begin++;
                end--;
            }
            else return tof(s,begin+1,end)||tof(s,begin,end-1);
        }
    }
    return true;
    }

    bool tof(string s,int a,int b)
{
    while(b>0)
    {
        if(a==b||a>b)
        {
            return true;
        }
        else
        {
            if(s[a]==s[b])
            {
                a++;
                b--;
            }
            else return false;
        }
    }
    return true;
}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值