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

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.xdnf.cn/news/14654.html

相关文章:

  • PowerShell批量处理文件名称/内容的修改
  • 大模型在肺癌预测及个性化诊疗方案中的应用研究
  • Git——分布式版本控制工具
  • NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术
  • android gradle的优化
  • uni-app-配合iOS App项目开发apple watch app
  • 【大模型学习】项目练习:知乎文本生成器
  • RIP路由协议实验任务八:RIPv1配置与分析
  • Seata的总结
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • 领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式
  • NestJS中实现动态Cron任务管理
  • 【 感知集群】大规模分布式基础设施的AI赋能蓝图
  • JS红宝书笔记 8.2 创建对象
  • IPv4编址及IPv4路由基础
  • 73、MYSQL ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin含义
  • Transformer结构介绍
  • 记录存储的使用
  • uni-app项目实战笔记16--实现头部导航栏效果
  • 优化TCP/IP协议栈与网络层
  • 工程师生活:清除电热水壶(锅)水垢方法
  • Apache Hive技术详解
  • NetworkManager介绍与用法
  • Singularity 安装
  • [接口-ihrm]
  • Git版本控制详细资料
  • 计算机网络:(五)信道复用技术,数字传输系统,宽带接入技术
  • [Data Pipeline] Kafka消息 | Redis缓存 | Docker部署(Lambda架构)
  • 69、数据访问-准备阿里云redis环境
  • 面试题:设计一个分布式“附近的人”功能(如微信附近的人、交友应用位置匹配)