验证回文串2
1.题目:680. 验证回文串 II - 力扣(LeetCode)
给你一个字符串 s
,最多 可以从中删除一个字符。
请你判断 s
是否能成为回文字符串:如果能,返回 true
;否则,返回 false
。
2.解题思路
运用了贪心算法的思想,借助双指针实现。
1.如果第一个和最后一个元素相同,则内部的字符串是否为回文串决定了s是否为回文串;
2.如果第一个和最后一个元素不相同,则需要删除第一个或者最后一个才可能使得s成为回文串。
3.参考代码
class Solution {
public:bool ishuiwen(string str, int l, int r) {while (l < r) {if (str[l] != str[r]) {return false;}l++;r--;}return true;}bool validPalindrome(string s) {/*贪心算法的思想:1.如果第一个和最后一个元素相同,则内部的字符串是否为回文串决定了s是否为回文串;2.如果第一个和最后一个元素不相同,则需要删除第一个或者最后一个才可能使得s成为回文串。*/int L = 0;int R = s.size() - 1;while (L < R) {char c1 = s[L];char c2 = s[R];if (c1 == c2) {L++;R--;} else {return ishuiwen(s, L + 1, R) || ishuiwen(s, L, R-1);}}return true;}
};