【Leetcode】680. 验证回文字符串 Ⅱ

680. 验证回文字符串 Ⅱ

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
文字符串是判断顺序或者逆序是否是相同的
输入: s = “aba”
输出: true

这个题好适合用双指针做啊!

class Solution {
public:
	bool validpalindrome(string s) {
		int left = 0, right = s.length() - 1;
		bool bdelete = true;
		while (left <= right)
		{
			if (s[left] == s[right])
			{
				left++;
				right--;
			}
			else if (bdelete)
			{

				if (s[left] == s[right - 1])//最多删一次
				{
					right--;
					bdelete = false;
				}
				else
					break;
			}
			else break;
		}
		return left > right;
	}
};

这么搞不行,相当于只考虑了一种情况,还需要考虑其他情况
下边参考大佬的逻辑可以AC,考虑了两种情况

class Solution {
public:
	bool validpalindrome(string s) {
		for (int i = 0,j=s.length()-1; i < j; i++,j--)
		{
			if (s[i]!=s[j])
			{
				return ispalindrome(s.substr(i + 1, j - i)) || ispalindrome(s.substr(i, j - i));
				//这里截取长度的时候脑子转不过弯,牢记substr后边的是长度,截取的长度是相同的
			}
		}
		return true;
	}
	bool ispalindrome(string s)
	{
		int left = 0, right = s.length() - 1;
		while (left < right)
		{
			if (s[left] == s[right])
			{
				left++;
				right--;
			}
			else return false;
		}
		return true;
	}
};

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...