问题描述:
给定一个字符串,求它的最长回文子串的长度。
1、把原字符串变一下
原字符串:12212321
变化后字符串:$ # 1 # 2 # 2 # 1 # 2 # 3 # 2 # 1 # ($:防止越界)
这样变化的目的是让每个子回串长度都是奇数个,当回串中心不是'#'时,即可知原回串个数为奇数,当回串中心为‘#’时,可知原回串个数为偶数。
2、求解P[i]
P[i]:以i为中心的最长回串半径,包含中心点。如:
S:# 1 # 2 # 2 # 1 # 2 # 3 # 2 # 1 #
P:1 2 1 2 5 2 1 4 1 2 1 6 1 2 1 2 1
在这里,首先我们对S字符串进行标号:
博主注:S[0-4]表示字符串从0为起点到4结束的字串,为了方便,这样表示而已,同样S[8-4]即从8开始到4结束的字串,反过来的字串。
在这里,会发现一个问题,由P[4]=5,可知S[0-4]=S[8-4], 以i=4为中心,可知i=7与i=1对称,再由P[1]=2,可知S[0-