
股票交易网站开发,如何把广告发到网上,企业网站建设信息管理平台的立项目的,生鲜网站开发class Solution {
public:bool check(const string s,int l,int r){ //判断字符串是否为回文串for(int i=l,j=r;ij;++i,--j){if(s[i]!=s[j]){return false;}}return true;}bool validPalindrome(string s)…
class Solution {
public:bool check(const string s,int l,int r){ //判断字符串是否为回文串for(int i=l,j=r;ij;++i,--j){if(s[i]!=s[j]){return false;}}return true;}bool validPalindrome(string s) {int l=0,r=s.size()-1;while(lr){char c1=s[l],c2=s[r];if(c1==c2){++l;--r;}else{return check(s,l,r-1)||check(s,l+1,r);//算法核心步骤,每次字符不相等时,尝试判断删除最左或右的字符,如果删除后是回文串,则符合要求}}return true;}/*如果能删一个字母,分类讨论:如果 s[0]=s[n−1],那么必须删字母,可以删 s[0] 或 s[n−1],问题变成判断剩余子串(在不能删字母的情况下)是不是回文的。如果 s[0]=s[n−1],是否需要删字母呢?比如 s=aabcba 满足 s[0]=s[n−1],并且删掉 s[0] 后可以得到回文串 abcba。但如果删除 s[0] 能得到回文串,说明 s[0]=s[n−1]=s[1]=a,我们也可以改为删除 s[1],得到完全一样的回文串 abcba。这意味着,如果 s[0]=s[n−1],不删除 s[0] 也不删除 s[n−1],是不会错过正确答案的!问题变成判断下标在 [1,n−2] 的子串,能否在删至多一个字母的情况下变成回文串。这是一个规模更小的子问题,重复上述过程解决。*/