【5.9】指针算法-双指针解验证回文字符串 Ⅱ

devtools/2024/11/7 22:42:14/

一、题目

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

示例 1:
输入: s = "aba "
输出: true

示例 2:
输入: s = "abca"
输出: true
解释: 你可以删除c字符。

示例 3:
输入: s = "abc"
输出: false

提示:
1 <= s.length <= 10^5
s 由小写英文字母组成

二、解题思路

        如果仅仅是验证是否为回文串,这比较简单,之前也讲过利用双指针验证回文串。然而这道题中,如果不是回文串,我们还能够删除一个字符,然后判断其是否为回文。原理依旧与之前相同,使用两个指针 left 和 right,从字符串的两边相向而行。倘若两个指针指向的字符不一样,那就说明不能构成回文串,此时我们可以删除一个字符。可以删除 left 指向的字符,也可以删除 right 指向的字符,如下图所示。

三、代码实现

#include <iostream>
#include <string>// 判断子串[left, right]是否是回文串
bool isPalindromic(const std::string& s, int left, int right) {while (left < right) {if (s[left++] != s[right--]) {return false;}}return true;
}// 判断字符串是否是有效的回文串
bool validPalindrome(const std::string& s) {// 左指针int left = 0;// 右指针int right = s.length() - 1;while (left < right) {// 如果两个指针指向的字符不一样,我们要删除一个,要么// 删除left指针指向的值,要么删除right指针指向的值if (s[left] != s[right]) {return isPalindromic(s, left + 1, right) || isPalindromic(s, left, right - 1);}left++;right--;}return true;
}int main() {std::string s = "abca";std::cout << std::boolalpha << validPalindrome(s) << std::endl;  // 输出: truereturn 0;
}
时间复杂度 :O(n),n是字符串的长度
空间复杂度 :O(1),需要额外的常数大小的辅助空间。


http://www.ppmy.cn/devtools/132141.html

相关文章

基于python主观题自动阅卷系统毕业设计项目

基于python主观题自动阅卷系统毕业设计项目 大家好&#xff0c;我是陈辰学长&#xff0c;一名在 Java 圈辛勤劳作的码农。今日&#xff0c;要和大家分享的是一款基于python主观题自动阅卷系统毕业设计。项目源码以及部署相关事宜&#xff0c;请联系陈辰学长&#xff0c;文末会…

stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?

因为想用STM32F103的PA15引脚&#xff0c;调试程序的时候不小心把SWD和JTAD接口都给关了&#xff0c;先看下罪魁祸首 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关掉JTAG&#xff0c;不关SWGPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关掉SW&am…

想转行网络安全,可以先看看过来人的建议

在当前就业形势下&#xff0c;不少朋友面临转行的困境。网络安全作为一个热门领域&#xff0c;自然也吸引了许多人的目光。本文将就转行网络安全这一话题&#xff0c;提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。…

在Rocky Linux 9上部署NFS服务并对其进行权限配额管理以及监控

NFS&#xff08;Network File System&#xff09;是一种分布式文件系统协议&#xff0c;最初由Sun Microsystems公司开发&#xff0c;用于在不同计算机之间通过网络共享文件。NFS允许客户端访问位于服务器上的文件&#xff0c;就像这些文件存储在本地一样。它通常用于Unix和类U…

蓝桥杯-网络安全比赛题目-遗漏的压缩包

小蓝同学给你发来了他自己开发的网站链接&#xff0c; 他说他故意留下了一个压缩包文件&#xff0c;里面有网站的源代码&#xff0c; 他想考验一下你的网络安全技能。 &#xff08;点击“下发赛题”后&#xff0c;你将得到一个http链接。如果该链接自动跳转到https&#xff0c;…

基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统

基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的咖啡馆管理系统是一个综合性的Web应用程序&#xff0c;用于管理和优化咖啡馆的运营。下面我将提供一个详细的案例程序概述&#xff0c;包括主要的功能模块和技术栈介绍。 项目概述 功能需求 用户管理&…

WPF+MVVM案例实战(二十一)- 制作一个侧边弹窗栏(AB类)

文章目录 1、案例效果1、侧边栏分类2、AB类侧边弹窗实现1.文件创建2、样式代码与功能代码实现3、功能代码实现 3 运行效果4、源代码获取 1、案例效果 1、侧边栏分类 A类 &#xff1a;左侧弹出侧边栏B类 &#xff1a;右侧弹出侧边栏C类 &#xff1a;顶部弹出侧边栏D类 &#xf…

Redis实战-利用Lua解决批量插入防重方案

需求场景 一个最简单的插入需求&#xff0c;但是因为考虑写入性能&#xff0c;采用批量插入Mysql的方式&#xff0c;但是这引申了一个并发问题&#xff0c;假如网络抖动等其它原因造成了接口重复请求&#xff0c;批量插入情况下如何对一条条数据做好防重处理。 防重 OR 幂等 …