一:题目
二:上码
class Solution {
/**
思路:
1.确定dp数组
dp[i][j]:表示的是区间范围内[i,j]的字符串是否是回文串
2.确定dp数组递推公式
1>:如果s[i] != s[j] 那就是false
2>:如果s[i] == s[j]
如果 i - j <= 1 那么的话 dp[i][j] 就为true
如果 i - j > 1 的话 那就要看 dp[i+1][j-1]是啥了 acbca
3.确定dp数组如何初始化
初始化为false
4.确定dp数组的遍历顺序
主要看dp[i+1][j-1] 在左下角 所以我们是从下往上遍历 从左往右遍历
5.代数验证
*/
public int countSubstrings(String s) {
int len = s.length();
int ans = 0;
boolean[][] dp = new boolean[len][len];
//初始化为false
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
dp[i][j] = false;
}
}
//遍历顺序 从下到上 从左到右
for (int i = len -1; i >= 0; i--) {
for (int j = i; j < len; j++) {
if (s.charAt(i) == s.charAt(j)) {
if (Math.abs(i-j) <= 1) {
dp[i][j] = true;
ans++;
}else if(dp[i+1][j-1]) {
dp[i][j] = true;
ans++;
}
}
}
}
return ans;
}
}