[LeetCode] 125. Valid Palindrome 验证回文字符串
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.
验证一个给定的字符串是否为回文,用两个指针分别指向字符的首尾,判断是否相同,相同就的都向中间移动1位,判断下一组,左指针小于右指针就一直循环。遇到标点符号就跳过,处理下一个。遇到大写字母就转换成小写字母。
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution { public boolean isPalindrome(String s) { char [] chs = s.toCharArray(); int left = 0 , right = s.length() - 1 ; while (left <= right) { while (left < right && !Character.isLetterOrDigit(chs[left])) left++; while (left < right && !Character.isLetterOrDigit(chs[right])) right--; if (Character.toLowerCase(chs[left++]) != Character.toLowerCase(chs[right--])) return false ; } return true ; } } |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Solution { public boolean isPalindrome(String s) { int size = s.length(), i = 0 , j = size - 1 ; s = s.toLowerCase(); while (i < j) { if (!(s.charAt(i) >= 'a' && s.charAt(i) <= 'z' ) && !(s.charAt(i) >= '0' && s.charAt(i) <= '9' )) { i++; } else if (!(s.charAt(j) >= 'a' && s.charAt(j) <= 'z' ) && !(s.charAt(j) >= '0' && s.charAt(j) <= '9' )) { j--; } else { if (s.charAt(i) != s.charAt(j)) return false ; i++; j--; } } return true ; } } |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution: def isPalindrome( self , s): i, j = 0 , len (s) - 1 while i < j: while i < j and not s[i].isalnum(): i + = 1 while i < j and not s[j].isalnum(): j - = 1 if s[i].lower() ! = s[j].lower(): return False i, j = i + 1 , j - 1 return True |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution { public : bool isPalindrome(string s) { int left = 0, right = s.size() - 1 ; while (left < right) { if (! isalnum (s[left])) ++left; else if (! isalnum (s[right])) --right; else if ((s[left] + 32 - 'a' ) %32 != (s[right] + 32 - 'a' ) % 32) return false ; else { ++left; --right; } } return true ; } }; |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public : bool isPalindrome(string s) { int l = 0, r = s.size() - 1; while (l <= r){ while (! isalnum (s[l]) && l < r) l++; while (! isalnum (s[r]) && l < r) r--; if ( toupper (s[l]) != toupper (s[r])) return false ; l++, r--; } return true ; } }; |
类似题目:
[LeetCode] 9. Palindrome Number 验证回文数字
[LeetCode] 5. Longest Palindromic Substring 最长回文子串
[LeetCode] 516. Longest Palindromic Subsequence 最长回文子序列
All LeetCode Questions List 题目汇总
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理