Bootstrap

647  计算一个字符串中回文子串的数目  Medium

                                                                                                                                      点击此处返回总目录

 

【题目】

 

 

 

【方法一:动态规划】

我们在使用动态规划求最长回文子串问题时,dp[i][j]数组保存的就是a[i][j]是否是字符串。所以只要统计一下dp[][]数组中有多少个元素不为0,就是回文子串的个数。

 

代码:

 

结果:

 

 

【方法二:中心扩展法】

长度为奇数的回文串,中间有一个字符。长度为偶数的回文串,中间有两个字符。

所以分别统计以S[i]为中心的串。以S[i-1][i]为中心的串。

 

 

代码:

 

结果:

 

 

【方法三:马拉车算法】

在使用马拉车算法求最长回文子串问题时,我们得到了len[]数组,len[i]表示以这个元素为中心的回文串的最大长度。

假设d[i]为偶数。比如d[i]=4,说明像如为"abba""cccc"之类的,这时中心元素是"|"(即转换后字符串的"#")。以这个中心的回文串数量为len[i]/2。

假设d[i]为奇数。比如d[i]=5,说明像如为"abcba","ccccc"之类的,这时中心元素是字符。以这个中心的回文串数量为(len[i]-1)/2+1。

 

统一可以写成:(len[i]+1)/2。

 

 

代码:

 

 

 

结果:

 

 

 

 

 

 

 

 

 

;