352 字
2 分钟
Leetcode->验证回文串
题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
**说明:**本题中,我们将空字符串定义为有效的回文串。
示例1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
示例2:
输入: "race a car"
输出: false
解释:"raceacar" 不是回文串
提示:
1 <= s.length <= 2 * 105
- 字符串
s
由 ASCII 字符组成
代码
Js
TIP
- 首先,根据题意使用正则过滤掉不符合条件的字符(用空字符代替)
- 然后双指针遍历(题目要求忽略字母大小写,所以统一转成小写进行判断)
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
s = s.replace(/[^a-z0-9A-Z]/g,'')
for(let i=0,j = s.length - 1;i<j;i++,j--){
if(s[i].toLocaleLowerCase() !== s[j].toLocaleLowerCase()){
return false
}
}
return true
};
C
TIP首先定义i,j当做两个指针,与上面代码的不同之处仅仅是,C中没有工具函数,利用一个循环结合ASCII码将符合条件的字符存储在数组s[]的前面部分(大写字母则+32转成小写)
bool isPalindrome(char * s){
int i = 0,j = 0;
while(s[i]){
if(s[i] >= 48 && s[i] <= 57)
s[j++] = s[i];
//
else if(s[i] >= 65 && s[i] <= 90){
s[i] += 32;
s[j++]= s[i];
}
else if(s[i] >= 97 && s[i] <= 122)
s[j++] = s[i];
i++;
}
int left = 0,right = j - 1;
while(left < right){
if(s[left] != s[right])
return false;
left++;
right--;
}
return true;
}
Leetcode->验证回文串
https://blog.oceanh.top/posts/algorithm/验证回文串/