做笔试题的时候没做出来,但是基本思路想到了
思路:中心拓展法
单数情况:判断一个字符两边字符是否相等,相等则继续拓展比较。不相等就可以进行当前字符串的截取
双数情况:判断str[i]==str[i+1]?
相等则继续拓展比较
注意substr截取字符串的参数。
下次不能for
循环套while
循环,容易超时。
var longestPalindrome = function (s) {
let a = ''
let b = ''
let str = s
if (str == '') return ''
for (let i = 0; i < str.length; i++) {
a = circleString(str, i, i) //单数情况
b = circleString(str, i, i + 1) //双数情况
}
return a.length > b.length ? a : b
}
var circleString = function () {
let res = ''
return function (str, i, j) {
while (i >= 0 && j < str.length) {
if (str[i] == str[j]) {
i--
j++
} else {
break
}
}
i++
j--
// console.log("截取字符串" + i, j)
let temp = str.substr(i, j - i + 1)
if (temp.length > res.length) {
res = temp
// console.log("res:" + res)
}
return res
}
}()
时间复杂度:O(n²)
空间复杂度:O(1)
更加清楚认识闭包机制。
虽然这次笔试没有做出来,但是感觉自己的算法思维越来越好了。
加油!