给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
示例 1:
输入: s = "aba"
输出: true
示例 2:
输入: s = "abca"
输出: true
解释: 可以删除 "c" 字符 或者 "b" 字符
示例 3:
输入: s = "abc"
输出: false
提示:
1 <= s.length <= 105
s 由小写英文字母组成
解析:
双指针,一个从前向后,一个从后向前,如果有不同,判断删除第一次出现的不同的字符就可以(注意这里要判断两次,不同的两个字符分别删)
因为之后的不同必须保证 第一次出现不同的地方相同
class Solution { public: bool validPalindrome(string s) { int l = 0, r = s.length() - 1; int flag = 0; while(l < r) { if(s[l] != s[r] && flag == 0) { flag = 1; r--; } else if(s[l] != s[r]) { break; } else l++, r--; } if(flag == 0 || l >= r) return true; flag = 0; l = 0, r = s.length() - 1; while(l < r) { if(s[l] != s[r] && flag == 0) { flag = 1; l++; } else if(s[l] != s[r]) { break; } else l++, r--; } if(flag == 0 || l >= r) return true; return false; } };