【题目】
【方法一:动态规划】 我们在使用动态规划求最长回文子串问题时,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。
代码:
结果:
|