求star

开源不易,喜欢请点个star吧

Ocean Han
352 字
2 分钟
Leetcode->验证回文串
2022-06-11

题目#

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

**说明:**本题中,我们将空字符串定义为有效的回文串。

示例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/验证回文串/
作者
Ocean Han
发布于
2022-06-11
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49