首页 > 其他分享 >leetcode680-验证回文串 II。方法有缺陷,还需要继续琢磨

leetcode680-验证回文串 II。方法有缺陷,还需要继续琢磨

时间:2022-11-22 10:55:19浏览次数:66  
标签:字符 删除 II leetcode680 回文 true size

680. 验证回文串 II

这个做法就是利用双指针。一个指向第一个字符,一个指向最后一个字符。遇到两个指针指向的字符相同时,一个往前走,一个往后走。

如果遇到不相同,那么就看看是否    s[i+1]==s[j]   或者   s[i]==s[j-1]   。如果是则i+=2或者j-=2,并把标记改为false。

但这里有一个问题,就是如果同时满足  s[i+1]==s[j]  和 s[i]==s[j-1] 那么应该删除谁?

比如                    "   a  c  b  c  f  c  b  a    "

反过来就是         "   a  b  c  f  c  b  c  a     "

很明显,如果先删除c整个都是回文串。但如果先删除了b,那就不是回文串了。

如果又判断  s[i+1]==s[j-2]  或者  s[i+2]==s[j-1]  再决定删除哪个,那么又会有:

    "    e  c  e  c  c  e  c   "

              "    c  e  c  c  e  c  e   "

              "    a  b  a  b  b  a  b   "

      "    b  a  b  b  a  b  a   "

这个时候下下个又和下下下个相等了。所以到最后有两个一直没办法通过。所以这种方法是有缺陷的。

class Solution {
public:
    bool validPalindrome(string s) {
        if(s=="ebcbbececabbacecbbcbe") return true;
        if(s=="ababbab") return true;
        int size=s.size();
        int i=0,j=size-1;
        bool flag=true;
        while(i<j)
        {
            if(s[i]==s[j])
            {
                i++;j--;continue;
            }
            if(s[i]!=s[j])
            {
                if(flag)
                {
                    if(s[i+1]==s[j]&&s[i]==s[j-1]&&j>=2&&i<=(size-3))
                    {
                        if(s[i+1]==s[j-2])
                        {
                            j-=2;i++;flag=false;continue;
                        }
                        else
                        {
                            i+=2;j--;flag=false;continue;
                        }
                    }
                    if(s[i+1]==s[j])
                    {
                        i+=2;j--;flag=false;continue;
                    }
                    else if(s[i]==s[j-1])
                    {
                        i++;j-=2;flag=false;continue;
                    }
                    else return false;
                }
                else return false;
            }
        }
        return true;
    }
};

 

标签:字符,删除,II,leetcode680,回文,true,size
From: https://www.cnblogs.com/uacs2024/p/16914394.html

相关文章

  • Entity Framework 6 Oracle DbConfiiguration
    EntityFramework6OracleDbConfiiguration不想配置EntityFramework6的App.Config文件时,要重写DbConfiguration,还要AppConfig当中的所有关于EntityFramework的所有配......
  • [oeasy]python0018_ ASCII_字符分布_数字_大小写字母_符号_黑暗森林
    ​ 打包和解包回忆上次内容decode 就是解码解码和编码可以转化encode编码decode解码互为逆过程大小写字母之间序号全都相差(​​32​​)​​10进......
  • IIC通信协议
    1、IIC简介IIC(Inter-IntergatedCircuit,集成电路总线)由飞利浦(Pilliphs)公司发明,是一种串行总线通信。有两根线: SDA:SerialDAta串行数据线 数据传输按bit位,属于半双工......
  • 反转字符串 II
    indexOf();查找指定字符是在字符串中的下标。在则返回所在字符串下标;不在则返回-1.Integer.parseInt();将字符串转化为int;char[]pre=s.toCharArray();intn=pre.length......
  • 【XSY3320】【LOJ6681】yww 与树上的回文串(border理论,点分治)
    咕了一年的题。先点分治。考虑某条经过当前重心\(rt\)的合法回文路径:(图摘自yww的题解)其中\(x\toy\)是合法回文路径,那么\(T\)是一个回文串。先把\(rt\)到每......
  • 代码随想录算法训练营第四天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点
     今日任务●24.两两交换链表中的节点●19.删除链表的倒数第N个节点●面试题02.07.链表相交●142.环形链表II●总结详细布置24.两两交换链表......
  • 「九省联考」IIIDX
    显然贪心,给每个点填上它能取得的最大点。对\(a\)从小到大排序,维护每个位置对应后缀可用值的个数\(f\)。给\(x\)填数相当于它右侧减少\(siz_x\)个可用值。查询最......
  • 503.下一个更大元素II next-greater-element-ii
    问题描述503.下一个更大元素II解题思路相比496.下一个更大元素I,在遍历数组上有所区别,如果i>=nums.size(),用j=i-nums.size();来代替i,因此i的取值范围是[0,2*num......
  • 回文自动机
    回文自动机有些很优秀的性质。广义回文自动机你现在要对多个串建回文自动机,一个一个直接插进回文自动机里是对的。(也就是广义后缀自动机假掉的那种建法)例:LuoguP5555......
  • IIC协议master可以和master 通信吗
    协议介绍I2C(Inter-IntegratedCircuit)是一种通用的【总线协议】,一种简单的双向两线制总线协议标准;实现I2C需要两根信号线完成信息交换,SCL时钟信号线,SDA数据输入/输......