当前位置: 首页 > news >正文

LeetCode 680.验证回文串 II

目录

题目:

题目描述:

题目链接:

思路:

核心思路:

思路详解:

代码:

C++代码:

Java代码:


题目:

题目描述:

题目链接:

680. 验证回文串 II - 力扣(LeetCode)

思路:

核心思路:

双指针

思路详解:

定义i指针指向首位,j指针指向末位,每次将两个指针指向的字符进行比较,如果两个字符相同就i指针后移,j指针前移。由题最多可以从中删除一个字符,我们思考一下发现如果两个指针指向的字符不同我们删除字符存在两种情况,一种是删除左边的字符,另一种是删除右边的字符。这里我们可以利用与运算的性质,只要有一种情况为true就是true,两种情况都为false才是false。所以我们可以再定义一个函数表示删除某边字符再检查的函数,两种删除的情况只需要传入不同的参数即可实现

这题有两个易错点,一个是双指针结束循环的条件,另一个是在参数传递时可能出现的问题,具体可能出现的问题已经在代码注释中详细地进行了解释

代码:

C++代码:

class Solution {
public:bool validPalindrome(string s) {int i = 0;           //i指针指向首位int j = s.size()-1;  //j指针指向末位while(i < j)  //这里加不加=都可以过,不加时间还能更快一点//注意不能是i!=j,如果是偶数长度字符串会出现i和j交错永远不相等而死循环{if(s[i] == s[j]){i++;j--;}else{//先检查删除左边字符的情况,在检查删除右边字符的情况//两种情况做与运算,有一种为true返回true,如果都为false返回falsereturn checkPalindrome(s,i+1,j) || checkPalindrome(s,i,j-1);//注意这里容易出现参数传递的问题,如果是i++或者是j--作为参数传递//会导致先传递当前值,然后才递增/递减,可能使索引越界//正确的是上述方式或者是++i,--j作为参数传递}}return true;  //此处返回true表明没有删除字符,即初始字符串就是回文串}bool checkPalindrome(string s,int i,int j)  //定义删除某边字符再检查的函数{while(i < j){if(s[i] == s[j]){i++;j--;}else{return false;  //题目要求最多可以从中删除一个字符,此时再不满足回文串就返回false}}return true;}
};

Java代码:

class Solution {  //注释同理C++代码public boolean validPalindrome(String s) {int i = 0;int j = s.length()-1;while(i < j){if(s.charAt(i) == s.charAt(j)){i++;j--;}else{return checkPalindrome(s,i+1,j) || checkPalindrome(s,i,j-1);}}return true;}public boolean checkPalindrome(String s,int i,int j){while(i < j){if(s.charAt(i) == s.charAt(j)){i++;j--;}else{return false;}}return true;}
}

http://www.lqws.cn/news/454933.html

相关文章:

  • Python内存使用分析工具深度解析与实践指南(上篇)
  • GoogLeNet:图像分类神经网络的深度剖析与实践
  • chili3d笔记19 读取dxf
  • 大话软工笔记—功能的概要设计
  • 数据库part2---子查询
  • 常用绘图工具网站推荐合集:打造高效可视化表达力!
  • OPENPPP2 通用有栈协程架构探秘(C++ 高级编程指南)
  • 解决uni-app发布微信小程序主包大小限制为<2M的问题
  • 嵌入式学习笔记——day36-多路IO复用
  • 在PHP环境下使用SQL Server的方法
  • Ruoyi(若依)整合websocket实现信息推送功能(消息铃铛)
  • AS32A601与ASM1042芯片在电力系统自动化监控中的应用效能分析
  • tkinter Entry(输入框)组件学习指南
  • Linux/Armageddon
  • Sentinel 服务限流机制
  • 信息抽取数据集:多层次分类与深度分析综述
  • C#读取OPCUA节点数据
  • API 调试工具校验 JSON Mock 接口(一):无参请求与基础响应验证
  • Android 当apk是系统应用时,无法使用webView的解决方案
  • 汽车加气站操作工考试题库含答案【最新】
  • DB面试题
  • mysql查询使用`_rowid` 虚拟列
  • vtk和opencv和opengl直接的区别是什么?
  • Pinia在多步骤表单中的实践应用
  • 芯谷科技--高性能、高可靠性降压转换器D3502C
  • 泛型方法调用需要显示指定泛型类型的场景
  • 【JUC面试篇】Java并发编程高频八股——线程池
  • 5G 浪潮:发展全景、困境突围与未来航向
  • Fiddler抓包工具使用技巧:如何结合Charles和Wireshark提升开发调试效率
  • conda(Anaconda/Miniconda)常用命令