- 题目描述
- 题解
- 代码
- 闲话
题目描述
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例
输入: “aba”
输出: True
输入: “abca”
输出: True
解释: 你可以删除c字符。
题目来源
leetcode–680
题解
其实这道题简单的.我的具体思路如下:
- 一个字符串里面可能会有一个多余的字符,防止他成为回文字符串所以你需要将其删除.
- 既然我们想到了删除,但是真正意义上的删除很麻烦的,所以需要换一种思路形成删除的效果,我想的是跳过.
- 现在有一个问题,我应该删左边字符呢?还是右边的字符呢?既然你不确定那么分别删除看剩下的是否是回文字符串.
所以以上思路总结就是:
删掉左边的字符,剩下的是否为回文?
删掉右边的字符,剩下的是否为回文?
具体代码如下:
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,是个有趣的和我无关的一天(单身汪).
哈哈哈哈哈哈!!!
我是一个大一小菜鸡(又菜又单身)