使用中心扩散的方法 : 从中间开始,向两边同时遍历,当左右元素一样的时候,代表满足回文条件。 一直循环这个过程去判断,直到左右不相等,截取这一段就好了。
注意: 要同时考虑字符串为奇数,和字符串为偶数的情况,但不论是奇数还是偶数,都进行revert(i,i)和revert(i,i+1),因为我们需要只是最大回文子串
var longestPalindrome = function(s) {
let max = ''
let left = null
let right = null
//遍历整个字符串,当字符串长度为奇数的时候,left = right = i
//当字符串长度为偶数的时候, left = i , right = i+1
for(let i=0;i<s.length;i++){
//偶数奇数情况都处理,反正只需要最大回文子串
revert(i,i)
revert(i,i+1)
}
function revert(left,right){
while(left>=0&&right<=s.length-1&&s.charAt(left)===s.charAt(right)){
center = s.substring(left,right+1)
left--
right++
}
max = center.length>max.length?center : max
}
return max
};
下面我们再来回顾一下字符串的方法:
获取目标索引的字符
var str = "abcde";
console.log(str.charAt(0));//a
截取字符串
- slice( left , right ) : left开始截取的位置,right完成截取的位置,顾头不顾尾
- substring ( left , right ) : left开始截取的位置,right完成截取的位置,顾头不顾尾
- substr(left , len):left开始截取的位置,len要截取长度,顾头不顾尾
遍历字符串
for(var i=0;i< a.length;i++){
console.log(i);//0 1 2 3 4 5 6
}
for(var key in a){
console.log(key);//0 1 2 3 4 5 6
}
for(var i=0;i< a.length;i++){
console.log(a[i]);//a b c d e f g
}
for(var i=0;i< a.length;i++){
console.log(a.charAt(i));//a b c d e f g
}
查找字符:
indexOf: 从头开始查找,找到返回索引,找不到返回-1
lastIndexOf:从尾开始查找,找到返回索引,找不到返回-1
替换字符:replace()对原字符串没有影响
var str = "abcdefa";
console.log(str.replace("a", "嘻嘻"))
//嘻嘻bcdefa,默认只处理找到的第一个字符
首尾去空:trim()
var str = " abcde fg h ";
console.log(str.length);//13
console.log(str.trim().length);//10
大小写转换:
- toLowerCase()转成小写
- toUpperCase() 转成大写