【Valid Palindrome】cpp
题目:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,"A man, a plan, a canal: Panama"
is a palindrome."race a car"
is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
代码:
class Solution { public: bool isPalindrome(string s) { std::transform(s.begin(), s.end(), s.begin(),::tolower); std::string::iterator begin = s.begin(); std::string::iterator end = s.end(); while ( begin < end ) { if ( !::isalnum(*begin) ){ ++begin; } else if ( !::isalnum(*end) ){ --end; } else if ( *begin != *end ){ return false; } else{ ++begin; --end; } } return true; } };
Tips:
1. isalnum transform函数省去了不少篇幅
2. 双指针技巧,从两头往中间逼近,不用判断奇数偶数,代码很简洁。
============================================
第二次过回文判断的题,大体思路还在,iswalnum和transform能想起来有这么个东西,具体用法记不住了。代码改了一次以后AC了。
class Solution { public: bool isPalindrome(string s) { if (s.size()==0) return true; std::transform(s.begin(), s.end(), s.begin(),::tolower); int p1 = 0; int p2 = s.size()-1; while ( p1<p2 ) { if ( !::iswalnum(s[p1]) ) { p1++; continue; } if ( !::iswalnum(s[p2]) ) { p2--; continue; } if ( s[p1++]!=s[p2--] ) return false; } if (p1>p2) return true; return s[p1]==s[p2]; } };
分类:
cpp刷Leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?