链接:https://ac.nowcoder.com/acm/contest/18874/1038
来源:牛客网
题目描述
既然大家都知道回文串是怎么回事了,那我们就长话短说,现在有一个字符串,长度小于1200,我想知道最长的回文子串长度是多少。
输入描述:
多组输入,输入字符串只包含小写字母。
输出描述:
每组输出一个数字,表示最长的回文子串。
输入
aqppqole
ebcml
输出
4
1
解析:
需要找到给定回文串中最长的一个回文子串
根据回文串的特性从左端固定字符,从右端想固定字符遍历。当右端字符与本次外层for的固定字符相同后,进入写定的dedp函数,判断从此两位字符包含到的字符串是否为回文串,若是,则更新最长数字。若否,则继续向固定字符遍历,当到达位置后跳出该字符的循环,进入下一字符循环
简单来讲思路就是从第一个字符开始找它能组成的所有子串,判断哪是否回文,直到最后一个字符
package main
import (
"fmt"
)
func dedp(a,b int,c string)(s bool){
for a<b {
if c[a] == c[b]{
a++
b--
}else {
return false
}
}
return true
}
func main() {
var b string
for {
n, _ := fmt.Scan(&b)
if n == 0 {
break
} else {
chang :=0
length := len(b)
for i:=0;i<length;i++{
for j:=length-1;j>i;j--{
if b[i]==b[j]{//当i==j时即可往下深扒
if dedp(i,j,b){
if chang<j-i {
chang=j-i
}
}
}
}
}
fmt.Println(chang+1)
}
}
}