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从大到小。
该博客介绍了一个使用动态规划求解Java字符串中回文子串数量的方法。代码中,博主通过一个二维布尔数组dp来存储子串是否为回文,并从字符串末尾开始遍历,依次判断所有可能的子串。最终返回回文子串的总数。
483

被折叠的 条评论
为什么被折叠?



