0
点赞
收藏
分享

微信扫一扫

Leetcode 680. 验证回文字符串 Ⅱ

拾杨梅记 2022-03-18 阅读 46

680. 验证回文字符串 Ⅱ

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

示例 1:

输入: s = “aba”
输出: true
示例 2:

输入: s = “abca”
输出: true
解释: 你可以删除c字符。
示例 3:

输入: s = “abc”
输出: false

思路:
使用双指针,左端等于右端时,同时往里移动。
允许删除一个相当于左端或右端可跳过一次。
所以设置两个检查变量,当左右两端不相等时,分别只移动一个,同时改变检测变量。
若两个检查变量有一个不超过一即可。
代码如下:

class Solution {
public:
    bool validPalindrome(string s) {
        int a=0;
        int b=s.length()-1;
        int wr=0;
        while(a<=b){
            if(s[a]==s[b]){
                a++;
                b--;
            }
            else if(s[a]!=s[b]){
                a++;
                wr++;
            }
            if(wr>1){
                break;
            }
            
        }
        
        a=0;
        b=s.length()-1;
        int wb=0;
        while(a<=b){
            if(s[a]==s[b]){
                a++;
                b--;
            }
            else if(s[a]!=s[b]){
                b--;
                wb++;
            }
            if(wb>1){
                // cout<<"here_2"<<endl;
                break;
            }
            
        }
        if(wr<=1||wb<=1)
        return true;
        else return false;


    }
};
举报

相关推荐

0 条评论