题目简介:
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
示例 2:
1 2 3
| 输入: "abca" 输出: True 解释: 你可以删除c字符。
|
注意:
- 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
思路:
首先写一个判断字符串是否是回文串的函数,然后设置两个指针一前一后依次遍历给定的字符串,如果两个指针指向的值不同,则判断字符串s[i + 1]……[j]
或s[i]……s[j - 1]
是否为回文串,即删除一个不相等的字符后,判断剩余的字符串是否为回文串。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { public:
bool valid_judge(string s, int low, int high){
for(int i = low, j = high; i < j; i++, j--){
if(s[i] != s[j]) return false; }
return true; }
bool validPalindrome(string s) {
int count = 0; for(int i = 0, j = s.length() - 1; i < j; i++, j--){
if(s[i] != s[j]){
return valid_judge(s, i + 1, j) || valid_judge(s, i, j - 1); } }
return true; } };
|