38 - 验证回文串

题目

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

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

示例 1:

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

示例 2:

输入: "race a car"

输出: false

解答

反转字符串

想法就是,用正则把空格、标点都删掉,然后全改成小写,看前后是不是匹配

怎么看前后是不是匹配呢?有一道题叫“回文数”,思路是一样的。

原来的方法是再造一个数组,反转了字符串的后半部分,然后一个个对比。

var isPalindrome = function (s) {
  if (!s) {
    return true
  }
  s = s.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g, "").toLowerCase();


  const half = Math.round(s.length / 2);
  const reverseStr = s
    .slice(half - 1)
    .split("")
    .reverse()
    .join("");
  for (let i = 0; i < half; i++) {
    if (s[i] !== reverseStr[i]) {
      return false;
    }
  }
  return true;
};

Runtime: 80 ms, faster than 38.77% of JavaScript online submissions for Valid Palindrome.

Memory Usage: 37.2 MB, less than 74.19% of JavaScript online submissions for Valid Palindrome.

双指针

Runtime: 84 ms, faster than 27.35% of JavaScript online submissions for Valid Palindrome.

Memory Usage: 37 MB, less than 80.65% of JavaScript online submissions for Valid Palindrome.

优化

作者:wo-sha-du-bu-hui-2

链接:https://leetcode-cn.com/problems/two-sum/solution/javascriptshi-xian-by-wo-sha-du-bu-hui-2/

原来的做法是把所有的标点和空格都去掉,他的做法是只留下字母和数字。

反转字符串

Runtime: 64 ms, faster than 91.55% of JavaScript online submissions for Valid Palindrome.

Memory Usage: 37.3 MB, less than 73.66% of JavaScript online submissions for Valid Palindrome.

双指针

Runtime: 68 ms, faster than 82.62% of JavaScript online submissions for Valid Palindrome.

Memory Usage: 37 MB, less than 81.18% of JavaScript online submissions for Valid Palindrome.

两个都快了不少。

不过他的评价做法是新建一个字符串,反转,并比较是否相等。很浪费资源就是了

Runtime: 76 ms, faster than 53.79% of JavaScript online submissions for Valid Palindrome.

Memory Usage: 38.2 MB, less than 48.93% of JavaScript online submissions for Valid Palindrome.

go

作者:elliotxx 链接:https://leetcode-cn.com/problems/two-sum/solution/4mstou-wei-zhi-zhen-de-go-shi-xian-by-elliotxx/

Runtime: 4 ms, faster than 73.49% of Go online submissions for Valid Palindrome.

Memory Usage: 3 MB, less than 62.07% of Go online submissions forValid Palindrome.

研究了一下这个代码,有几个收获:

  • 第六行,定义指针可以两个一起定义

  • 处理字符串的方法,本来想用正则,结果会有很多strings.Replace(),感觉没这个比较的方法好。

go的测试环境

Last updated

Was this helpful?