leetcode——680.验证回文字符串

题目:

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串
输入: s = "aba"
输出: true 

### 解题思路

采用双指针的方法,两边同时移动。

设i=0,j=s.size()-1,因为这是回文,所以两边应该是对称的。

如果i==j,则i++,j--;

如果i!=j,则考虑删除i或者j所对应的字符;

(1)删除i所对应的字符,如果此时构成回文串,返回true,否则转入(2)

(2)删除j所对应的字符,如果此时构成回文串,返回true,否则返回(3)

在这一题上我卡了挺久(题目标注简单题QAQ)

做完之后看官方题解,发现我一直在研究怎么在一个函数里实现这些功能,但是如果分成两个函数来计算就容易多了。

 

bool validPalindrome(string s) {
	int len=s.size(),m=0,n=0,i=0,j=len-1;
	while(i<=j){
		if(s[i]==s[j]){
			++i;
			--j;
			continue;
		}else{
			break;
		}
	}
	m=i;
	n=j;
	i++;
	while(i<=j){
		if(s[i]==s[j]){
			++i;
			--j;
			continue;
		}else{
			break;
		}
	}
	if(i>j) return true;
	i=m;
	j=n;
	j--;
	while(i<=j){
		if(s[i]==s[j]){
			++i;
			--j;
			continue;
		}else{
			return false;
		}
	}
	return true;
    }
    
int main(){
	string s="cbbcc";
	cout<

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)