class Solution {
public int countSubstrings(String s) {
// 1.确定dp数组 dp[i,j] 表示闭区间[i,j]范围内是否是一个回文子串
int n = s.length();
char[] ch = s.toCharArray();
boolean[][] dp = new boolean[n][n];
/**
2.确定递推关系
if(ch[i] == ch[j]){
分三种情况:
1.i==j
2.j-i=1
3.j-i>1
if(j-i<=1){
dp[i][j] = true;
result++;
}else{
if(dp[i+1][j-1] == true){
dp[i][j] = true;
result++;
}
}
}
*/
int result = 0;
// 3.初始化 都为false
// 4.遍历顺序 由左下方推导的,从下往上,从左往右
for(int i=n-1; i>=0; i--){
for(int j=i; j<n; j++){
if(ch[i] == ch[j]){
if(j-i<=1){
dp[i][j] = true;
result++;
}else{
if(dp[i+1][j-1]==true){
dp[i][j] = true;
result++;
}
}
}
}
}
return result;
}
}
运行结果: