第一种方法:暴力求解,时间复杂度O(n^3)
两个嵌套循环遍历字符串中的所有子字符串,另一个循环用来判断当前子字符串是否为回文。
func Longestpalindromicstring_On3(s string) string {
length := 0
var str string
for i := 0; i < len(s); i++ {
for j := i; j < len(s); j++ {
sli := s[i : j+1]
ispalindromic := true
for k := 0; k < len(sli)/2; k++ {
if sli[k] != sli[len(sli)-k-1] {
ispalindromic = false
}
}
if ispalindromic == true {
if len(sli) > length {
length = len(sli)
str = sli
}
}
}
}
return str
}
第二种方法:采用对于字符串中常用start/end或者是low/high前后遍历法。时间复杂度为O(n^2)
将子字符串的长度分为单数和双数,分别进行不同的赋值。
遍历0:len(s)-1,如果是单数,low=high=index;如果是双数:low=index, high= index+1
func Longestpalindromicstring_On2(s string) st