当前位置: 首页 > 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;}
}

相关文章:

  • WinUI3开发_设置标题栏高度
  • .NET 4.7中使用NLog记录日志到数据库表
  • 通过Radius认证服务器实现飞塔/华为防火墙二次认证:原理、实践与安全价值解析
  • 非线性方程组求解:复杂情况下的数值方法
  • JavaScript Symbol 属性详解
  • GA3C(GPU/CPU混合式异步优势Actor-Critic)算法实现控制倒立摆
  • Cppcheck 使用教程:本地 + CMake + GitHub Actions 自动分析实战
  • 创业知识概论
  • 【ing】Ubuntu安装Anaconda及环境配置\docker\pycharm
  • Qwen3 Embedding 结构-加载-训练 看透模型设计哲学
  • Linux——库文件生成和使用
  • ADC的传递函数
  • Spring 源码学习 2:Bean 后处理器
  • 大模型学习入门——Day3:注意力机制
  • 零基础入门PCB设计 一实践项目篇 第四章(STM32开发板PCB设计)
  • Seata:微服务分布式事务的解决方案
  • 饼图:数据可视化的“切蛋糕”艺术
  • 详解Redis的过期策略
  • 邮件合并----批量从excel表中导出数据到word中
  • Git——分布式版本控制工具
  • 海沧网站建设/品牌关键词优化哪家便宜
  • 免费网站建设seo/如何优化网页加载速度
  • app平台运营模式/网站优化关键词
  • 东莞疫情最新消息实时/汕头网站排名优化
  • 可以做内容的网站/成都sem优化
  • 用阿里云做网站/运营推广的方式和渠道有哪些