zoukankan      html  css  js  c++  java
  • 125. 验证回文串(简单)

    题目链接

    题目描述

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

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

    示例 1:

    输入: "A man, a plan, a canal: Panama"
    输出: true
    解释:"amanaplanacanalpanama" 是回文串

    示例 2:

    输入: "race a car"
    输出: false
    解释:"raceacar" 不是回文串

    提示:

    1 <= s.length <= 2 * 105
    字符串 s 由 ASCII 字符组成

    思路:

    • 将原字符串中字母数字部分保留,存到另一个字符串中(可以用正则表达式,也可以直接遍历取出)
    • 再将新字符串统一转为大写/小写
    • 然后比较该字符串与翻转后是否一致,是则为回文串(可以用双指针分别指向字符串头尾两侧,相向移动遍历,也可以用API方法)

    当然,也可以直接在原字符串上设双指针相向遍历,遇到字母或数字就转为大写/小写判断是否相等,就无须额外的空间存新字符串,时间为O(n)(n为原字符串长度)

     1 /* JavaScript */
     2 /**
     3  * @param {string} s
     4  * @return {boolean}
     5  */
     6 var isPalindrome = function(s) {
     7     /* 提取新字符串 */
     8     // const reg = /[^A-Z0-9]/gi
     9     // let str = s.replace(reg, '') // 将非字母非数字的部分替换为空串''
    10     // str = str.toUpperCase() // 将字符串转为大写(小写也行,目的是统一大小写)
    11     // return str === str.split('').reverse().join('') // 将字符串与翻转后的字符串比较,一样则为回文串
    12 
    13     /* 在原字符串基础上判断 */
    14     const reg = /[A-Z0-9]/i
    15     let i=0, j=s.length-1
    16     while(i<j) {
    17         while(i<j && !reg.test(s.charAt(i))) i++
    18         while(i<j && !reg.test(s.charAt(j))) j--
    19         if(i<j) {
    20             if(s.charAt(i).toUpperCase() !== s.charAt(j).toUpperCase()) return false
    21             i++
    22             j--
    23         }
    24     }
    25     return true
    26 };
  • 相关阅读:
    python 四舍五入
    Elasticsearch 入门
    Mac下ElasticSearch安装、Kibana
    Mysql 终端中文显示乱码
    Zookeeper 在 Kafka 中的作用
    mac 安装Kafka
    Creating a NuGet Package in 7 easy steps
    Updating and Publishing a NuGet Package
    ASP.NET Core 发布
    An entry point cannot be marked with the 'async' modifier
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15405626.html
Copyright © 2011-2022 走看看