标签:
最长回文子串
可以采用DP法,遍历法以及manacher算法
目前自己只实现了遍历法,因为比较直观而且简单- -,之后再完善。
个人感觉此问题可以作为学习动态规划的题目,目前还在学习动态规划中,处于能理解能看懂,但是还不能将动态规划作为解题工具的状态,需要理解更深刻。
遍历法:
简单来说就是遍历字符串里面的每个字符,向2边扩展,寻找最长的回文串,但是此方法需要分两种情况,即回文串为奇数和回文串为偶数的情况。
GoLang: func longestPalindrome(s string) string { var result string var maxLength int = 0 length := len(s) for i := 0; i < length; i++ { fmt.Println("current i :" + strconv.Itoa(i)) oddOffset := 1 for i-oddOffset >= 0 && i+oddOffset < length && s[i-oddOffset] == s[i+oddOffset] { oddOffset++ fmt.Println("current oddOffset :" + strconv.Itoa(oddOffset)) } oddOffset-- currentLength := 2*oddOffset + 1 fmt.Println("current currentOddPalindarome :" + strconv.Itoa(currentLength)) if currentLength > maxLength { maxLength = currentLength result = s[i-oddOffset : i+oddOffset+1] } evenOffset := 0 for i-evenOffset >= 0 && i+1+evenOffset < length && s[i-evenOffset] == s[i+1+evenOffset] { evenOffset++ fmt.Println("current evenOffset :" + strconv.Itoa(evenOffset)) } evenOffset-- currentLength = 2*evenOffset + 2 if currentLength > maxLength { maxLength = currentLength result = s[i-evenOffset : i+1+evenOffset+1] } } return result }
标签:
原文地址:http://www.cnblogs.com/RingLu/p/5630017.html