680 leetcode验证回文字符串2 Valid Palindrome II (Easy)

  • 思路:双指针,左右指针,当出现了不相等的情况,先尝试删除左边的字符,在删除此字符的基础上单独对剩下的字符遍历,若又出现了不等的情况,记录flag=flase. 再尝试删除右边的字符,重复上面的过程,然后若是成功遍历完了删除后的所有字符(即l1>=l2时),则flag = true(这种情况是左边删除失败,但右边删除成功的情况)。 最后的return true是针对字符串本身就是回文字符串的情况,无需进行删除的情况。
class Solution {
public:
    bool validPalindrome(string s) {
       int left = 0, right = s.length()-1;
       while(left<right){
           if(s[left] != s[right]){
               bool flag = true;
               int l1,l2;
               if(left+1<right){
                   l1 = left+1,l2 = right;
                   while(l1<l2){
                       if(s[l1++] != s[l2--]){
                           flag = false;
                           break;
                       }
                   }
               }
               //向右试探 flag = false即上一步删除是失败的
               if(flag == false && left <right - 1){
                   l1 = left, l2 = right-1;
                   while(l1<l2){
                       if(s[l1] != s[l2]) break;
                       ++l1;--l2;
                   }
                   if(l1>=l2) flag = true;//满足删除一个的条件成功走到l1>=l2
               }
               if(flag == false) return false;
               return true;
           }
           ++left; --right;
       }
       return true;//本来就是回文字符串的
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值