LeetCode刷题笔记 680.验证回文字符串 Ⅱ

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

 

示例 1:

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

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

输入: s = "abc"
输出: false
 

提示:

1 <= s.length <= 105
s 由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome-ii

思路:

双指针→←反向查找,当字符不同时分别删除一个字符再调用单独的函数判断是否构成回文串。

跳过当前一个不同元素,不好分别哪一个才是需要删除的。

复制代码
 1 class Solution {
 2 public:
 3     bool validPalindrome(string s) {
 4         if (s.empty())  return true;
 5         int l = 0, r = s.size() - 1;
 6         while (s[l] == s[r] && l < r) {
 7             ++l, --r;
 8         }
 9         return (l >= s.length() / 2) || isPalindrome(s, l + 1, r) || isPalindrome(s, l, r - 1);
10     }
11 
12     bool isPalindrome(string s, int l, int r) {
13         while (l < r) {
14             if (s[l] == s[r])   l++, r--;
15             else return false;
16         }
17         return true;
18     }
19 };
复制代码

 

posted @   仓隽  阅读(17)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示