题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
for {
r := bufio.NewReader(os.Stdin)
b, _, err := r.ReadLine()
if err == io.EOF {
break
}
str := string(b)
if str != "" {
getMaxStr(str)
}
}
}
func getMaxStr(str string) {
var maxLen int
for i := range str {
dInt := doubleCheck(str, i)
sint := singleCheck(str, i)
if maxLen < dInt {
maxLen = dInt
}
if maxLen < sint {
maxLen = sint
}
}
fmt.Println(maxLen)
}
func doubleCheck(str string, current int) int {
var pre int = current
var suf int = current + 1
var count int
for {
if pre < 0 || suf > len(str)-1 {
break
}
if str[pre] != str[suf] {
break
}
count += 2
pre -= 1
suf += 1
}
return count
}
func singleCheck(str string, current int) int {
var pre int = current
var suf int = current
var count int
for {
pre -= 1
suf += 1
if pre < 0 || suf > len(str)-1 {
break
}
if str[pre] != str[suf] {
break
}
count += 2
}
return count + 1
}