Skip to content

[js] 第30天 写一个方法判断字符串是否为回文字符串 #108

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第30天 写一个方法判断字符串是否为回文字符串

Activity

tiu5

tiu5 commented on May 16, 2019

@tiu5

https://leetcode-cn.com/problems/valid-palindrome/

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:

输入: "race a car"
输出: false

大概步骤:

  • 获取有效的字符串,我们利用正则去匹配字母和数字,因为忽略大小写,所以我们转成小写
  • 然后利用 split('') 把字符串分割成数组,再用数组的 reverse() 去反转,再用 join(‘’) 去拼接
  • 最后进行比较
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
  if (s.length === 1) return true
  const str = s.replace(/[^a-zA-Z0-9]/g, "").toLowerCase()
  const strReverse = str.split('').reverse().join('')
  return str === strReverse
};
sansini

sansini commented on May 16, 2019

@sansini

function cheackstr(str){
var reversestr=str.split("").reverse().join("");
if(str===reversestr){
alert("我是回文字符串");
}else{
alert("我不是回文字符串")
}
}

myprelude

myprelude commented on Jun 13, 2019

@myprelude
function cheackstr(str){
  var reversestr=str.split("").reverse().join("");
  if(str===reversestr){
    alert("我是回文字符串");
  }else{
    alert("我不是回文字符串")
  }
}
Konata9

Konata9 commented on Jul 10, 2019

@Konata9
const isPalindrome = (str) =>
  str ===
  str
    .split("")
    .reverse()
    .join("");

console.log(isPalindrome("abc"));
console.log(isPalindrome("abcdcba"));
console.log(isPalindrome("abccba"));
console.log(isPalindrome("abccbaabc"));
15190408121

15190408121 commented on Sep 21, 2019

@15190408121
function cheackstr(str){
  var reversestr=str.split("").reverse().join("");
  if(str===reversestr){
    alert("我是回文字符串");
  }else{
    alert("我不是回文字符串")
  }
}
0x3c

0x3c commented on Mar 8, 2020

@0x3c
function isPalindrome(str) {
  let lp = 0,
    rp = str.length - 1;
  while (lp <= rp) {
    if (str[lp++] != str[rp--]) return false;
  }
  return true;
}
gaoryrt

gaoryrt commented on Mar 9, 2020

@gaoryrt
function isPalindrome(str) {
  let lp = 0,
    rp = str.length - 1;
  while (lp <= rp) {
    if (str[lp++] != str[rp--]) return false;
  }
  return true;
}

双指针从头尾往中间遍历,这个效率比前面的回答高多了

ferrinweb

ferrinweb commented on Mar 9, 2020

@ferrinweb
function isPalindrome(str) {
  let lp = 0,
    rp = str.length - 1;
  while (lp <= rp) {
    if (str[lp++] != str[rp--]) return false;
  }
  return true;
}

双指针从头尾往中间遍历,这个效率比前面的回答高多了

没有考虑无效字符以及大小写,不过双指针还是高效。

zxl-lxz

zxl-lxz commented on Mar 26, 2020

@zxl-lxz
const fn = (str) => {
    str = str.replace(/(\W+)|(\_+)/g, '');
    let newStr = str.split('').reverse().join('');
    if (str === newStr) {
        return true;
    }
    return false;
}
NAZBIN

NAZBIN commented on Jun 3, 2020

@NAZBIN

const check = s => {
return s === s.split('').reverse().join('');
}

console.log(check('aba'));

blueRoach

blueRoach commented on Jun 29, 2020

@blueRoach
    function isPalindrome (st){
      let tem = st.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()
      return tem == tem.split('').reverse().join('')
    }
CoderLeiShuo

CoderLeiShuo commented on Aug 8, 2020

@CoderLeiShuo

把上边各位的答案做了一下总结

题目链接

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:

输入: "race a car"
输出: false

这个题的关键点在于判断字符串(长度为n)的第i个字符和第(n - 1) - i字符是否相等

'1 2 3 4 3 2 1 '  =>  length -> 7
 0 1 2 3 4 5 6
 str[0] == str[6]
 str[1] == str[5]
 str[2] == str[4]

方法一

使用for循环进行遍历

/**
 * @description: 判断字符串是否是回文字符串
 * @param {string} str
 * @return {boolean} 
 */
function isPalindrome(str) {
    if (str.length === 1) return true;
    str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    for (let i = 0; i < str.length; i++) {
        if (str[i] != str[str.length - 1 - i]) {
            return false;
        }
    }
    return true;
}

方法二

通过数组反转字符,然后再和原字符串进行比较

/**
 * @description: 判断字符串是否是回文字符串
 * @param {string} str 
 * @return {boolean} 
 */
function isPalindrome(str) {
    if (str.length === 1) return true;
    str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    const strReverse = str.split('').reverse().join('');
    return str == strReverse;
}

方法三

双指针遍历,从两边向中间进行遍历。其实和第一种方法中的for循环中if语句的判断条件类似

function isPalindrome(str) {
    if (str.length === 1) return true;
    str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();

    let lp = 0,
        rp = str.length - 1;
    while (lp <= rp) {
        // 这里lp再进行str[lp]运算,然后再自增
        if (str[lp++] != str[rp--]) {
            return false;
        }
    }
    return true;
}
laboonly

laboonly commented on Aug 24, 2020

@laboonly

function judgeStr(s) {
    let str = s.toLocaleLowerCase().replace(/[^a-zA-Z0-9]/g,'')
    
    let strRe = str.split('').reverse().join('');
    
    return str === strRe; 
}


smile-2008

smile-2008 commented on Sep 29, 2020

@smile-2008

/**

  • @param {string} s
  • @return {boolean}
    */
    var isPalindrome = function(s) {
    if (s.length === 1) return true
    const str = s.replace(/[^a-zA-Z0-9]/g, "").toLowerCase()
    const strReverse = str.split('').reverse().join('')
    return str === strReverse
    };
iceCream0311

iceCream0311 commented on Nov 18, 2020

@iceCream0311

function cheackstr(str) {
str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()
if (str == [...str].reverse().join('')) {
return true
} else {
return false
}
}

ttop5

ttop5 commented on Nov 18, 2020

@ttop5
function isPalindrome(str) {
  const rts = str.split('').reverse().join('');
  return rts === str;
}
HNHED

HNHED commented on Sep 4, 2021

@HNHED
<script> function is_reverse(str){ let re_str = str.split('').reverse().join(''); return re_str===str } console.log(is_reverse('aba')) </script>
github-cxtan

github-cxtan commented on Feb 23, 2022

@github-cxtan

var str = '锵咚锵';

function isPalindrome(data) {
if (data.length === 1)
return true;
let str1 = data.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
let str2 = str1.split('').reverse().join('');
return str1 === str2
}
console.log(isPalindrome(str));

xiaoqiangz

xiaoqiangz commented on May 30, 2022

@xiaoqiangz

// 判断是否为回文字符串
var str8 = 'KabcdDcBak'
function isPalindrome(str) {
// 转成小写
str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
// 第一种
// let str1 = str.split('').reverse().join('')
// return str === str1

  // 第二种 双指针遍历
  let arr = str.split('')
  let i = 0, k = str.length -1
  while(i<k) {
    if (arr[i++] != arr[k--]) {
      return false
    }
  }
  return true

}
console.log(isPalindrome(str8))
wenxd

wenxd commented on Jun 6, 2022

@wenxd
  let str = 'abcdcba';
  isOk = true;
  for (let i = 0; i < str.length; i++) {
    if (i > str.length / 2) {
      break;
    }
    if (str[i] !== str[str.length - 1 - i]) {
      isOk = false;
    }
  }
  console.log(isOk);
Sobrium

Sobrium commented on Sep 16, 2022

@Sobrium
function isPalindrome(str){
    is(str.length === 1) return true;
    str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    for(let i = 0; i < str.length; i++){
        if(str[i] !== str[str.length - 1 - i]){
            return fasle;
        }
    }
    return true;
}
function isPalindrome(str){
    is(str.length === 1) return true;
    str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    let newStr = str.split('').reverse().join('');
    return str === newStr;
}
function isPalindrome(str){
    is(str.length === 1) return true;
    str = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    let lp = 0,
         rp = str.length -1;
    while(lp <= rp){
         if(str[lp++] !== str[rp--]){
              return false;
         }
    }
    return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @smile-2008@ferrinweb@haizhilin2013@gaoryrt@Konata9

        Issue actions

          [js] 第30天 写一个方法判断字符串是否为回文字符串 · Issue #108 · haizlin/fe-interview