验证回文串——双指针
原题在这里:
概述题意:给定一个字符串,在可以删除一个字符的条件下,问是否是回文串。
analyse:
1.刚开始我就想到翻转硬比较:
比较到不等的地方有一个标记,考虑删除 当前位 或者 对称位
code:

class Solution { public: bool validPalindrome(string s) { string x = s; reverse(x.begin(), x.end()); int id = -1, l = s.length(); for (int i = 0; i < l; ++i) if (s[i] != x[i]) { id = i; break; } if (id == -1) return true; string u = s, v = x; s.erase(s.begin() + id), x.erase(x.begin() + l - id - 1); cout << s << '1' << x << endl; v.erase(v.begin() + id), u.erase(u.begin() + l - id - 1); cout << u << '2' << v << endl; return s == x || v == u; } };
效率比较低。
2.双指针,我还是没想到,只想到了可以只分析一半字符串,在这种题情况下,确实应该多往双指针方向思考,也不难。
code:
class Solution { string t; bool flag = false; void dfs(int x, int y, int pd) { if (pd < 0 || flag) return; if (x >= y) { flag = true; return; } if (t[x] == t[y]) dfs(x + 1, y - 1, pd); else dfs(x + 1, y, pd - 1), dfs(x, y - 1, pd - 1); } public: bool validPalindrome(string s) { //双指针思想 t = s; dfs(0, s.length() - 1, 1); return flag; } };
【Over】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!