classSolution:defcountSubstrings(self, s:str)->int:
cnt =0
n =len(s)
dp =[[Falsefor i inrange(n)]for j inrange(n)]for i inrange(n -1,-1,-1):for j inrange(i, n):if s[i]== s[j]and(j - i <=1or dp[i +1][j -1]):
cnt +=1
dp[i][j]=Truereturn cnt
方法二:中心拓展
classSolution:defcountSubstrings(self, s:str)->int:defspeard(l, r):
cnt =0while l >=0and r <len(s):if s[l]== s[r]:# print(s[l: r + 1]) # 左闭右开
l -=1
r +=1
cnt +=1else:breakreturn cnt
ans =0for i inrange(len(s)):
ans += speard(i, i)# 中心是一个字符;
ans += speard(i, i +1)# 中心是2个字符;return ans