leetcode刷题—验证回文字符串II

该博客主要讨论如何验证一个字符串在允许删除一个字符的情况下是否能变成回文串。通过双指针策略,从两端向中间遍历,若发现不匹配则尝试删除一个字符并检查剩余部分是否为回文。提供C++和Python3的实现代码。
摘要由CSDN通过智能技术生成

验证回文字符串

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例

aba true
abca true
abcda false

思路:
使用双指针,一个指针start从前往后遍历,一个指针end从后往前遍历,如果不一样,start+1或者end-1,判断两个字字符串是否为回文字符串,如果有一个是,返回true;
代码及注释:
C++:

calss Solution{
	//判断一个字符串是否为回文字符串
	//param s 源字符串
	//param start 待判别字符串起始位置
	//param end   待判别字符串结束位置
	//return
	bool checkPalindrome(const string &s,int start,int end){
		//当start == end ,指示同一位置,所以为<
		while(start<end){
			//如果对应位置上的字符不同,return false
			if(s[start]!=s[end])
				return false;
			//前指针往后移,后指针往前移
			++start;
			--end;
		}
		//字符串遍历完成,返回true
		return true;
	}

	bool isPalindrome(string s){
		int low = 0;
		int high = s.size()-1;	
	
		while(low<high){
			//如果对应位置字符串相同,判断下一个位置
			if(s[low] == s[high]){
				++low;
				--high;
			}
			//如果不相同,删除low或者high,判断[low+1,high]到[low,high-1];
			else return checkPalindrome(low+1,high) || checkPalindrome(low,high-1);
		}
	return true;
	}
}

Python3:

def isPalindrome(self,s:str)->bool:
	# python中#代表注释
	# 句末加:表示和以下为同一部分
	def checkPalindrome(start,end):
		while start<end:
			if s[start]!=s[end]:
				return False
			else:
				start += 1
				end -= 1
		return True

	#空一行表示是两个部分
	#变量必须在初始化时赋值
	i,j = 0,len(s)-1
	while i<j:
		if s[i]==s[j]:
			i += 1
			j -= 1
		else:
			return checkPalindrome(i+1,j) or checkPalindrome(i,j-1)
	return True;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值