Leetcode(680)——验证回文字符串 Ⅱ

验证子串 【题目描述】 输入两个字符串,验证其中一个串是否为另一个串的子串。 【输入】 输入两个字符串, 每个字符串占一行,长度不超过200且不含空格。 【输出】 若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2) 否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1) 否则,输出 No substring。 【输入样例】 abc dddncabca 【输出样例】 abc is substring of dddncabca #incl 阅读详情

Leetcode(680)——验证回文字符串 Ⅱ

题目

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

示例 1:

输入: s = “aba”
输出: true

示例 2:

输入: s = “abca”
输出: true
解释: 你可以删除c字符。

示例 3:

输入: s = “abc”
输出: false

提示:

  • 111 <= s.length <= 10510^5105
  • s 由小写英文字母组成

题解

方法一:贪心(双指针)

思路

​​  考虑最朴素的方法:首先判断原串是否是回文串,如果是,就返回 true\text{true}true;如果不是,则枚举每一个位置作为被删除的位置,再判断剩下的字符串是否是回文串。这种做法的渐进时间复杂度是 O(n2)O(n^2)O(n2)的,会超出时间限制。

​​  我们换一种想法。首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同,如果不相同,则不是回文串;如果相同,则将左右指针都往中间移动一位,直到左右指针相遇,则字符串是回文串。

​​  在允许最多删除一个字符的情况下,同样可以使用双指针,通过贪心实现。初始化两个指针 low\textit{low}low 和 high\textit{high}high 分别指向字符串的第一个字符和最后一个字符。每次判断两个指针指向的字符是否相同,如果相同,则更新指针,将 low\textit{low}low 加 111,high\textit{high}high 减 111,然后判断更新后的指针范围内的子串是否是回文字符串。如果两个指针指向的字符不同,则两个字符中必须有一个被删除,此时我们就分成两种情况:即删除左指针对应的字符,留下子串 s[low+1:high]s[\textit{low} + 1 : \textit{high}]s[low+1:high],或者删除右指针对应的字符,留下子串 s[low:high−1]s[\textit{low} : \textit{high} - 1]s[low:high−1]。当这两个子串中至少有一个是回文串时,就说明原始字符串删除一个字符之后就以成为回文串。

​​  贪心策略是:左右指针遇到不同字符,则删除其中一个,然后继续遍历。

在这里插入图片描述

代码实现

我自己的

class Solution {
    bool checkValidPalindrome(string& s, int l, int r){
        while(l < r){
            if(s[l] == s[r]){
                l++;
                r--;
            }else return false;
        }
        return true;
    }
public:
    bool validPalindrome(string s) {
        // 反向双指针
        int l = 0, r = s.size()-1;
        while(l < r){
            if(s[l] == s[r]){
                l++;
                r--;
            }else return checkValidPalindrome(s, l+1, r) || checkValidPalindrome(s, l, r-1);
            // 因为不确定哪个是阻止回文字符串的字符串,所以都遍历,错误的那个很快就会退出函数,消耗时间不长
        }
        return true;
    }
};
复杂度分析

时间复杂度:O(n)O(n)O(n),其中 nn 是字符串的长度。判断整个字符串是否是回文字符串的时间复杂度是 O(n)O(n)O(n),遇到不同字符时,判断两个子串是否是回文字符串的时间复杂度也都是 O(n)O(n)O(n)
空间复杂度:O(1)O(1)O(1)。只需要维护有限的常量空间

5.3-14.验证子串【1.7编程基础之字符串15】 14.验证子串【1.7编程基础之字符串15】 输入两个字符串,验证其中一个串是否为另一个串的子串。 输入: 输入两个字符串, 每个字符串占一行,长度不超过200且不含空格。 输出: 若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2) 否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1) 否则,输出 No substring。 样例输入: abc dddncabca 样例输出: abc is substring of dd 阅读详情

相关推荐

实测对比:DJI O3、Walksnail Avatar、HDZero三大高清图传,谁才是低延迟王者?

本文对DJI O3、Walksnail Avatar V2和HDZero三大高清图传系统进行了实测对比,重点分析其在FPV飞行中的低延迟表现。通过专业测试环境和量化数据,揭示HDZero在原生低延迟架构上的优势,DJI O3在画质与延迟间的平衡,以及Walksnail的动态码率调整特点,为不同场景下的选购提供决策依据。

weixin_30756499的博客 442

验证回文子串

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: “aba” 输出: True 示例 2: 输入: “abca” 输出: True 解释: 你可以删除c字符。 贪心算法 考虑最朴素的方法:首先判断原串是否是回文串,如果是,就返回 true;如果不是,则枚举每一个位置作为被删除的位置,再判断剩下的字符串是否是回文串。这种做法的渐进时间复杂度是 O(n^2),会超出时间限制。 首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右.

weixin_40290389的博客 675

Aspen Plus下载教程Aspen Plus V14 保姆级安装步骤(附安装包)

26、在WlmAdmin界面中,依次点击【Subnet Servers】、【admin】、【Add Feature】、【From a File】、【To Server and its File】。35、在产品选择页面,勾选需要安装的所有产品(重要:不要勾选【Aspen Online(Plant Data)】),然后点击【File Location】。回到桌面,点击任务栏的【开始菜单】,在【所有应用】中找到【Aspen Plus V14】软件图标,将其拖到桌面上创建快捷方式。9、这里可以更改软件的安装位置。

ps_xiaowang的博客 1万+

openjudge 1.7.18 验证子串

字符数组

weixin_60869516的博客 856

ubuntu20.04安装nvidia-docker(解决有 Release 文件。 N: 无法安全地用该源进行更新,所以默认禁用该源错误)

然后想都不要想,nvidia+linux安装的东西,那肯定是不能安装成功的,恶毒的nvidia。按照nvidia官网给出的安装nvidia-docker流程来。在sudo apt-get update出现报错。然后再次update,发现还是会有一些警告类似于。,直接点击网页手动下载,发现下载成功!,注意会有安装先后顺序,安装给的提示就行。最后输入命令发现安装成功。然后替换掉里面的内容。直接不管,直接上命令。

weixin_48144140的博客 1235

避坑指南:Vue2中使用TinyMCE5常见问题解决方案(含PowerPaste插件异常处理)

本文针对Vue2项目中集成TinyMCE 5富文本编辑器时遇到的高频疑难问题,提供了一套深度实战解决方案。内容涵盖环境搭建、资源路径配置、图片与视频上传处理、以及替代PowerPaste插件的自定义粘贴清理方案,旨在帮助开发者有效规避常见陷阱,构建稳定可靠的内容编辑功能。

weixin_29012677的博客 154

18:验证子串 c语言

否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1)若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2)输入两个字符串, 每个字符串占一行,长度不超过200且不含空格。输入两个字符串,验证其中一个串是否为另一个串的子串。否则,输出 No substring。

2303_79132118的博客 1349

别再死磕文档了!用国产MBSES软件5分钟上手MBSE建模(保姆级图文教程)

本文通过国产MBSES软件,详细演示了如何在5分钟内完成智能家居系统的MBSE建模。从模块图定义到状态机图构建,再到参数约束验证,全程图文指导,帮助工程师快速掌握基于模型的系统工程方法,显著提升复杂系统设计效率。

weixin_26833503的博客 237

LeetCode680.验证回文字符串Ⅱ

目录LeetCode680.验证会问字符串Ⅱ问题分析代码实现 LeetCode680.验证会问字符串Ⅱ 问题 分析 这个题目就是对于回文串的条件进行了放宽,允许删除一个元素,这样会导致字符之间的对应关系发生变化,相对简单的方法就是定义两个指针,分别从头部或者尾部进行遍历,直到两者汇合,如果发生不相等的情况,无非就是两种,要么删除头部的要么删除尾部的,最后只要有一个能形成一个回文串即可。 代码实现 public boolean validPalindrome(String s) { int

冢狐的私人空间 538

手把手教你用Qt和DSP28335实现串口Bootloader,附赠源码和避坑指南

本文详细介绍了如何使用Qt和DSP28335实现串口Bootloader,包括开发环境搭建、通信协议设计、Qt上位机开发、DSP端Bootloader核心实现以及应用程序工程的特殊配置。通过实战案例和源码分享,帮助开发者快速掌握嵌入式固件升级技术,提升工业设备远程升级的效率和可靠性。

weixin_29176179的博客 133

[FreeRTOS+STM32CubeMX] 03 USART串口调试-基于中断实现接收和发送数据

我们接着上一小节,上一节讲到,接收上位机传来的数据时,需要事先知道传来的数据的字节数,这一操作实在有些反人类,那么如何解决这个问题,上位机输入多少,我们就接收多少数据呢? 接下来我将把USART引入中断,在接收数据的回调函数中引入二值信号量、消息队列,来让我的接收数据能够存储在队列中,并一个一个的在任务中输出出来,并最终在上位机回显。

RichieHuang的博客 2648

Java题解LeetCode——680. 验证回文字符串 Ⅱ

LeetCode——680. 验证回文字符串 Ⅱ 题目 680.验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: “aba” 输出: True 示例 2: 输入: “abca” 输出: True 解释: 你可以删除c字符。 解析 用两个指针,一个从头,一个从尾遍历字符串,如果一样就继续;不一样,就先删除左边一个字符(左边的指针往右移动一位),然后接着用指针循环移动遍历,如果一旦发现不相等,就说明删除左边的字符不对,那就接着尝试删除右边的一个

影龙武的博客qq_43594119 581

基于CANopen协议,实现机器人500-1000Hz高频控制(附实操实例) (1)

基于CANopen协议实现机器人500-1000Hz高频控制,核心不是“协议本身的性能极限”,而是“通过优化配置、硬件适配、软件调优,最大化发挥协议的实时性优势”。关键在于:以PDO为核心实现实时数据传输,以SYNC帧锁定高频同步周期,以精简冗余、优化硬件降低总线负载,同时通过实操调试解决周期漂移、延迟、干扰等问题。

start_up_go的博客 91

力扣 680. 验证回文字符串 Ⅱ

仅为个人做题笔记 做题不要轴

shuaishuai__的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LeetCode 680. 验证回文字符串 Ⅱ | Python

使用双指针的方法,解决《680. 验证回文字符串 Ⅱ》问题

"大梦三千秋的博客 876

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

力扣Leetcode 680. 验证回文字符串 Ⅱ

验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 注意: 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。 题解 class Solution { public: bool checkPalindrome(const string& s, int low, int high) { // 判断是否为回

CoderZ's blog 296

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode680. 验证回文字符串 Ⅱ

LeetCode680. 验证回文字符串 Ⅱ class Solution { public: bool validPalindrome(string s) { int len = (int)s.length(); if(len <= 1) return true; int left = 0; int right = len - 1; while(left < right) { if(

oykotxuyang的博客 126

LeetCode 680. 验证回文字符串 Ⅱ

我的LeetCode:https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 680. 验证回文字符串 Ⅱ 题目 给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True 示例...

iTuring_Zhou的专栏 93

leetcode 680. 验证回文字符串 Ⅱ

leetcode 680. 验证回文字符串 Ⅱ 题目详情 题目链接 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: “aba” 输出: True 示例 2: 输入: “abca” 输出: True 解释: 你可以删除c字符。 注意: 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。 我的代码 class Solution { public: bool isPalindromeNumber(const string &s, i

qq_33789406的博客 190

中判断回文的代码_leetcode680. 验证回文字符串 Ⅱ

leetcode680. 验证回文字符串 Ⅱ给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba" 输出: True示例 2:输入: "abca" 输出: True 解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。方法:双指针思路:验证回文字符串的方法很简单,就是双指针,一个从头,一个从尾,不断比较两个指针...

weixin_32821477的博客 101

Leetcode 680. 验证回文字符串 Ⅱ

680. 验证回文字符串 Ⅱ代码:登录后复制 class Solution { public: //判断s【low,....high】是否是回文串 bool judge(string s,int low,int high) { while(low<=high) {...

weixin_41496897的博客 159

leetcode 算法题680 (简单171) 验证回文字符串 Ⅱ

leetcode 算法题680 (简单171) 验证回文字符串 Ⅱ 题目介绍 给定一个非空字符串 s, 最多删除一个字符。 判断是否能成为回文字符串。 示例 输入: “aba” 输出: True 输入: “abca” 输出: True 解释: 你可以删除c字符。 注意 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。 解法一 /** * @para...

FYuu95100的博客 237

680. 验证回文字符串 Ⅱ -力扣(leetCode)Javascript双指针

验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: s = “aba” 输出: true 示例 2: 输入: s = “abca” 输出: true 解释: 你可以删除c字符。 示例 3: 输入: s = “abc” 输出: false 提示: 1 <= s.length <= 105 s 由小写英文字母组成 解法: 由于该题目是判断回文串的进阶版,可以删除一个后判断,那么依旧可以用我们之前的双指针遍历方法,只不过在删除一个这个条件上.

weixin_53893220的博客 494

LeetCode 680. 验证回文字符串 Ⅱ(Valid Palindrome II) 1

680. 验证回文字符串 Ⅱ 680. Valid Palindrome II 题目描述 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 每日一算法2019/5/4Day 1LeetCode680. Valid Palindrome II 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 注意: ...

weixin_30721899的博客 136

Leetcode 680. 验证回文字符串 Ⅱ C++

Leetcode 680. 验证回文字符串 Ⅱ 题目 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 测试样例 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 注意: 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。 题解 双指针l、r s[l] == s[r],则l++,r– 否则,我们可以删除s[l]或者s[r],也就是我们从[l+1,r]或者[l,r-1]接着判断其是不是

weixin_43750513的博客 268

leetcode 680. 验证回文字符串 Ⅱ(2020.5.19)

【题目】680. 验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 注意: 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。 【解题思路1】在删减一次后判断子字符串是否是回文即可 s[i],s[i+1],…,...

Sophia_fez的博客 372
上一篇: Leetcode(633)——平方数之和
下一篇: Leetcode(524)——通过删除字母匹配到字典里最长单词
486L
博客等级 码龄7年 20粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值