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.
双指针
var isPalindrome = function (s) {
if (!s) {
return true
}
s = s.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g, "").toLowerCase();
let first = 0
last = s.length - 1
while (first < last) {
if (s[first] !== s[last]) {
return false
}
first++
last--
}
return true
};
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
原来的做法是把所有的标点和空格都去掉,他的做法是只留下字母和数字。
...
s = s.replace(/[^A-Za-z0-9]/g, "").toLowerCase();
...
反转字符串
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.
两个都快了不少。
不过他的评价做法是新建一个字符串,反转,并比较是否相等。很浪费资源就是了
...
return s == s.split('').reverse().join('')
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
func isPalindrome(s string) bool {
if s == "" {
return true
}
s = strings.ToLower(s)
first, last := 0, len(s)-1
for first < last {
if !('a' <= s[first] && s[first] <= 'z' || '0' <= s[first] && s[first] <= '9') {
first++
continue
}
if !('a' <= s[last] && s[last] <= 'z' || '0' <= s[last] && s[last] <= '9') {
last--
continue
}
if s[first] != s[last] {
return false
}
first++
last--
}
return true
}
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.