102 - 最长回文串

题目

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意: 假设字符串的长度不会超过 1010。

示例 1:

输入: "abccccdd"

输出: 7

解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

解答

可以用map,或者用数组。记录一下有没有相同的。遇到相同的就+2。

var longestPalindrome = function (s) {
  let data = new Array(58)
  let res = 0
  for (const item of s) {
    const code = item.charCodeAt() - 65
    if (data[code] === 1) {
      res += 2
      data[code] = 0
    } else {
      data[code] = 1
    }
  }
  if (res < s.length) {
    res++
  }
  return res
};

Runtime: 60 ms, faster than 74.08% of JavaScript online submissions for Longest Palindrome.

Memory Usage: 35.5 MB, less than 60.00% of JavaScript online submissions for Longest Palindrome.

这里偷了点懒,新建了58个的数组之后,里面的都是undefined,但是只要不是1,无论是第一次遇到的undefined还是有对象的0,就都令为1即可

就可以免去把数组全令0的for循环了。

最后如果还有剩下的,那么最多只能拿一个出来放在中间,因此就把结果++即可。

Runtime: 0 ms, faster than 100.00% of Go online submissions for Longest Palindrome.

Memory Usage: 2.1 MB, less than 100.00% of Go online submissions for Longest Palindrome.

Runtime: 44 ms, faster than 23.71% of Python3 online submissions for Longest Palindrome.

Memory Usage: 13.7 MB, less than 8.33% of Python3 online submissions for Longest Palindrome.

题解的方法看不太懂,所以我觉得我想的方法比题解好🙈

Last updated

Was this helpful?