时间复杂度:O(n²)
解题思路
该题还是用暴力中心扩展法更好做、更易理解!应付面试完全没问题!
遍历字符串所有字符,尝试以每个字符为中心向左右扩展比较左右两个字符是否相同,若相同那就是回文子串,出现的次数加1,如果不同那就说明已经不是回文子串了,尝试下一个中心点。
需要注意的是,中心点可能有一个,可能是两个(也可以理解为0个),所以要对两种情况分别进行中心扩展,求出所有的回文子串数目。
AC代码
func countSubstrings(s string) (res int) {
for i:=0;i<len(s);i++{
res+=test(s,i,i)
res+=test(s,i,i+1)
}
return res
}
func test(s string,left,right int)(count int){
for left>=0&&right<len(s){
if s[left]!=s[right]{
break
}
count++
left--
right++
}
return count
}
感悟
第一想到的是动态规划,但动态规划还是有些麻烦了,用中心扩展反倒更轻松一些。