回文串就是正着读和倒过来读字符的顺序是一样的,字符串中找最大的回文子串,我这里有两种方法来寻找。
方法一:找出字符串的所有子串,判断子串是否是回文串
function findPalindrome () {
let arr1 = 'asdfgfdsgh'
let self = this
let result = ''
for (let i = 0; i < arr1.length; i++) {
// let count = 0
for (let j = arr1.length - 1; j > -1; j--) {
if (self.isPalindrome(arr1.slice(i, j))) {
if (result.length < arr1.slice(i, j).length) {
result = arr1.slice(i, j)
}
}
}
}
console.log(result)
return result
},
// 判断一个数是不是回文数
isPalindrome (str) {
for (let i = 0; i < str.length; i++) {
if (str.charAt(i) === str.charAt(str.length - i - 1)) {
if (i > str.length - i - 1) {
return true
}
} else {
return false
}
}
}
方法二:给原数组中添加#,遍历该数组,找不到回文串就break,找下一个
isPalindrome () {
// let str = 'asdfgfdsgh'
let temp = '#a#s#d#f#g#f#d#s#g#h#'
// let temp = '#a#a#a#a#a#a#a#a#a#'
let arr = []
let result = ''
for (let i = 1; i < temp.length; i++) {
arr.push(0)
}
for (let i = 1; i < temp.length; i++) {
let count = 0
let left = i - 1
let right = i + 1
while (left > -1 && right < temp.length) {
if (temp.charAt(left) === temp.charAt(right)) {
count++
left--
right++
} else {
break
}
}
arr[i] = count
}
console.log(arr)
let max = 0
let inde = 0
for (let i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i]
inde = i
}
}
result = temp.slice(inde - max, inde + max)
console.log(result)
result = result.replace(/#/g, '')
console.log(result)
return result
}