class Solution {
public int countSubstrings(String s) {
boolean[][] dp = new boolean[s.length()][s.length()];
for(int i = s.length() - 1;i >= 0;i--){
for(int j = i;j < s.length();j++){
if(s.charAt(i) == s.charAt(j)){
if(j - i <= 1) dp[i][j] = true;
else {
dp[i][j] = dp[i + 1][j - 1];
}
}
}
}
int count = 0;
for(int i = 0; i < s.length();i++){
for(int j = i;j < s.length();j++){
if(dp[i][j]) count++;
}
}
return count;
}
}
因为是从i + 1和j - 1推导出来的,所以j从小到大,i从大到小。