题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
题解:
主要是先转换为小写,再利用正则表达式删除不是数字和字母的字符。
C++
#include//tolwer;#include // transform;class Solution { public: bool isPalindrome(string s) { transform(s.begin(), s.end(), s.begin(), ::tolower); // 转换为小写 s = regex_replace(s, regex("[^a-z0-9]"), "");// 去除不是字母和数字的字符 int i = 0; int j = s.size() - 1; while(i < j && s[i] == s[j]){ i++; j--; } return i >= j; } };复制代码
Java
class Solution { public boolean isPalindrome(String s) { s = s.toLowerCase();// 转换为小写 s = s.replaceAll("[^0-9a-z]", "");// 去除不是字母和数字的字符 int i = 0; int j = s.length() - 1; while(i < j) { if(s.charAt(i) == s.charAt(j)) { i++; j--; } else { return false; } } return true; }}复制代码
Python
class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ s = s.lower() s = re.sub('[^0-9a-z]', '', s) # 去除不是字母和数字的字符 i = 0 j = len(s) - 1 while i < j: if (s[i] == s[j]): i += 1 j -= 1 else: return False return True复制代码
JavaScript
/** * @param {string} s * @return {boolean} */var isPalindrome = function(s) { var reg = /[^0-9a-z]/g // g表示全局替换,否则只替换第一个 s = s.toLowerCase() s = s.replace(reg, "") // 去除不是字母和数字的字符 var i = 0 var j = s.length - 1 while (i < j) { if(s[i] === s[j]) { i++; j--; } else { return false; } } return true;};复制代码