leetcode每日一题---680. 验证回文字符串 Ⅱ

  1. 题目描述
  2. 题解
  3. 代码
  4. 闲话

题目描述

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

示例

输入: “aba”
输出: True

输入: “abca”
输出: True
解释: 你可以删除c字符。

题目来源
leetcode–680

题解

其实这道题简单的.我的具体思路如下:

  1. 一个字符串里面可能会有一个多余的字符,防止他成为回文字符串所以你需要将其删除.
  2. 既然我们想到了删除,但是真正意义上的删除很麻烦的,所以需要换一种思路形成删除的效果,我想的是跳过.
  3. 现在有一个问题,我应该删左边字符呢?还是右边的字符呢?既然你不确定那么分别删除看剩下的是否是回文字符串.

所以以上思路总结就是:
删掉左边的字符,剩下的是否为回文?
删掉右边的字符,剩下的是否为回文?

具体代码如下:

class Solution {
public:

    bool validPalindrome(string s) {
        int r,l,m;
        r=0;
        m=s.size();
        l=m-1;
        while(r<l)
        {
            if(s[r]!=s[l])
            {
                return change(s,r,l-1) || change(s,r+1,l);//删除左边和右边的字符
            }
            r++;
            l--;
        }
        return true;
    }
    bool change(string s,int r,int l)//检验剩下的字符串是否为回文.
    {
        if(r>=l)
        return true;
        while(r<l)
        {
            if(s[r]!=s[l])
            return false;
            r++;
            l--;
        }
        return true;
    }
};

好了讲完了!

到了闲话时刻

今天日期5-19
离我写完题解,就58分钟要到520,是个有趣的和我无关的一天(单身汪).
哈哈哈哈哈哈!!!

我是一个大一小菜鸡(又菜又单身)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值