8.最长回文子串-双指针法

思路:

双指针,left=i-1,right=i+1,i从0开始循环,先判断左长度+1,后判断右长度+1,接着判断两边+2。

再判断当前长度与最新长度,谁大取谁,最左边的标示位取left。

package main

// 思路:双指针,left=i-1,right=i+1,i从0开始循环,先判断左,后判断右,接着判断两边
func longestPalindrome(s string) string {
	var maxLen, maxStart int
	var longestLen = 1
	for i := 0; i < len(s); i++ {
		left, right := i-1, i+1
		for left >= 0 && s[left] == s[i] {
			left--
			longestLen++
		}
		for right < len(s) && s[right] == s[i] {
			right++
			longestLen++
		}
		for left >= 0 && right < len(s) && s[right] == s[left] {
			left--
			right++
			longestLen = longestLen + 2
		}
		if longestLen > maxLen {
			maxStart = left
			maxLen = longestLen
		}
		longestLen = 1
	}
	return s[maxStart+1 : maxStart+maxLen+1]
}

Last updated