题解
判断是不是回文这个很简单。但是要想办法减少重复计算,这就需要dp或者说记忆化搜索。
用数组cot[ i ][ len ] 代表从i 位置起长度为 len 的字串是否是回文,这样
我们从一个小的距离遍历的时候就可以回避多余的计算了。
Code
class Solution {
public:
bool cot[1001][1001];
int countSubstrings(string s) {
int ans ,n = s.size();
ans = n;
memset(cot,false,sizeof(cot));
for(int i=0;i<n;i++) cot[i][0]=true;
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++){
if(j-i==1){ //
if(s[i]==s[j]){
ans++;
cot[i][1]=true;
}
}else{ // j-i >=2
if(s[i]==s[j] && cot[i+1][j-i-2]){
ans++;
cot[i][j-i]=true;
}
}
}
}
return ans;
}
};