【LeetCode】680. 验证回文字符串 Ⅱ [C++]

【题目描述】

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

【思路】

分四种情况:1.本身是回文;2.删掉左边不相同的字符是回文,此时跳过左边字符,即l=l+2;3.删掉右边第一个不相同的字符是回文,此时跳过右边字符,即r=r-2;4.本身不是回文
所以给前三种情况都给一个flag,都初始化为1。第一次遇到不匹配时记录下左右不相同字符的位置,若都匹配则flag不变,直接返回true,若第二种第三种情况都不构成回文则返回false.

【代码】

class Solution {
public:
    bool validPalindrome(string s) {
        int n=s.size();
        int l=0,r=n-1;
        int pl,pr;
        int flag=1,flag2=1,flag3=1;
        while(l<r){
            if(s[l]==s[r]){
                --r;
                ++l;
                continue;
            }

            if(s[l]!=s[r]){   
                flag=0;
                pl=l;
                pr=r;
                break;
            }
        }
        if(flag)  //本身是回文
            return flag;

        int i=pl+1,j=pr;
        while(i<j){
            if(s[i]==s[j]){
                ++i;
                --j;
            }
            else{
                flag2=0;
                break;
            }
        }
        if(flag2)
            return flag2;

        i=pl,j=pr-1;
        while(i<j){
            if(s[i]==s[j]){
                ++i;
                --j;
            }
            else{
                flag3=0;
                return flag3;
            }
        }
        return flag3;
    }
};

 

posted @   Jerry2km1  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示