/** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { // 单个字符必然是回文串 if (s.length == 1) return s // 判断是否是回文串 var check = function(str){ var mid = parseInt(str.length/2)
for (var i = 0 ; i < mid ; i++) { if (str[i] != str[str.length-i-1]) { returnfalse } }
returntrue
} var res = '' //枚举出所有子串 for (var i = 0 ; i < s.length ; i++) { var cur = s[i] for (var j = i+1 ; j < s.length ; j++) { cur = cur + '' + s[j] if (check(cur)) {
if (cur.length > res.length) { // 每次取长度的较大值 res = cur } } } }
return res == '' ? s[0] : res };
上面解法可以通过,但是效率很低,通过观察回文串的特点我们可以知道,对于一个子串而言,如果它是回文串,并且长度大于2,那么将它首尾的两个字母去除之后,它仍然是个回文串。例如对于字符串ababa,如果我们已经知道 bab 是回文串,那么ababa 一定是回文串,这是因为它的首尾两个字母都是a。