给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
注意:
字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
C
bool compute(char* s,int left,int right)
{
while(left<right)
{
if(s[left]!=s[right])
{
return false;
}
left++;
right--;
}
return true;
}
bool validPalindrome(char* s)
{
int n=strlen(s);
int left=0;
int right=n-1;
while(left<right)
{
if(s[left]!=s[right])
{
return (compute(s,left+1,right)||compute(s,left,right-1));
}
left++;
right--;
}
return true;
}
C++
class Solution {
public:
bool validPalindrome(string s)
{
int n=s.length();
int index1=-1;
int index2=-1;
for(int i=0;i<n/2;i++)
{
if(s[i]!=s[n-1-i])
{
index1=i;
index2=n-1-i;
n--;
break;
}
}
if(s.length()==n)
{
return true;
}
string s1=s.substr(0,index1)+s.substr(index1+1,-1);
string s2=s.substr(0,index2)+s.substr(index2+1,-1);
int res1=1;
int res2=1;
for(int i=0;i<n/2;i++)
{
if(s1[i]!=s1[n-1-i])
{
res1=0;
break;
}
}
for(int i=0;i<n/2;i++)
{
if(s2[i]!=s2[n-1-i])
{
res2=0;
break;
}
}
return res1||res2;
}
};
python
class Solution:
def validPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
n=len(s)
left=0
right=n-1
while left<right:
if s[left]!=s[right]:
return self.comp(s,left+1,right) or self.comp(s,left,right-1)
left+=1
right-=1
return True
def comp(self,s,left,right):
while left<right:
if s[left]!=s[right]:
return False
left+=1
right-=1
return True