题目描述:
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
注意:
- 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
解题思路:
可以删除一个字符,那我们从两端开始找不同的字符,如果找到不相等的字符s[l]和s[r],那么s[l+1,r]或者s[l,r+1]必须为回文数才满足题目要求。
AC代码:
class Solution {
public:
bool isPalindrome(string s, int startIndex, int endIndex)
{
for (int i = startIndex, j = endIndex; i < j; i++, j--)
if (s[i] != s[j])
return false;
return true;
}
bool validPalindrome(string s)
{
for (int l = 0, r = s.length() - 1; l < r; l++, r--)
{
if (s[l] != s[r])
{
if (isPalindrome(s, l + 1, r) || isPalindrome(s, l, r - 1))
return true;
else
return false;
}
}
return true;
}
};