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 };
  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15405626.html
Copyright © 2011-2022 走看看