Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
haizhilin2013 opened this issue May 15, 2019 · 21 comments
Open
Labels
js JavaScript

Comments

@haizhilin2013
Copy link
Collaborator

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

@haizhilin2013 haizhilin2013 added the js JavaScript label May 15, 2019
@tiu5
Copy link

tiu5 commented May 16, 2019

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
Copy link

sansini commented May 16, 2019

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

@myprelude
Copy link

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

@Konata9
Copy link

Konata9 commented Jul 10, 2019

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
Copy link

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

@0x3c
Copy link

0x3c commented Mar 8, 2020

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

@gaoryrt
Copy link

gaoryrt commented Mar 9, 2020

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

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

@ferrinweb
Copy link

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

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

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

@zxl-lxz
Copy link

zxl-lxz commented Mar 26, 2020

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

@NAZBIN
Copy link

NAZBIN commented Jun 3, 2020

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

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

@blueRoach
Copy link

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

@CoderLeiShuo
Copy link

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

题目链接

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

示例 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
Copy link


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


@MrZ2019
Copy link

MrZ2019 commented Sep 29, 2020

/**

  • @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
Copy link

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

@ttop5
Copy link

ttop5 commented Nov 18, 2020

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

@HNHED
Copy link

HNHED commented Sep 4, 2021

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

@github-cxtan
Copy link

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
Copy link

// 判断是否为回文字符串
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
Copy link

wenxd commented Jun 6, 2022

  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);

@wyy-g
Copy link

wyy-g commented Sep 16, 2022

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
Labels
js JavaScript
Projects
None yet
Development

No branches or pull requests