Update 0647.回文子串.md

1. result 在遍历过程中 ++ 就行,没必要另外计算 
2.题目已经表明:s字符串的长度规则是:1 <= s.length <= 1000,所以前面不需要进行判断字符串长度
This commit is contained in:
milu-tao
2023-03-24 22:14:39 +08:00
committed by GitHub
parent 5d33abb6b3
commit b934f47c83

View File

@ -238,33 +238,24 @@ Java
```java ```java
class Solution { class Solution {
public int countSubstrings(String s) { public int countSubstrings(String s) {
int len, ans = 0; char[] chars = s.toCharArray();
if (s == null || (len = s.length()) < 1) return 0; int len = chars.length;
//dp[i][j]s字符串下标i到下标j的字串是否是一个回文串即s[i, j]
boolean[][] dp = new boolean[len][len]; boolean[][] dp = new boolean[len][len];
for (int j = 0; j < len; j++) { int result = 0;
for (int i = 0; i <= j; i++) { for (int i = len - 1; i >= 0; i--) {
//当两端字母一样时,才可以两端收缩进一步判断 for (int j = i; j < len; j++) {
if (s.charAt(i) == s.charAt(j)) { if (chars[i] == chars[j]) {
//i++j--即两端收缩之后i,j指针指向同一个字符或者i超过j了,必然是一个回文串 if (j - i <= 1) { // 情况一 和 情况二
if (j - i < 3) { result++;
dp[i][j] = true;
} else if (dp[i + 1][j - 1]) { //情况三
result++;
dp[i][j] = true; dp[i][j] = true;
} else {
//否则通过收缩之后的字串判断
dp[i][j] = dp[i + 1][j - 1];
}
} else {//两端字符不一样,不是回文串
dp[i][j] = false;
} }
} }
} }
//遍历每一个字串,统计回文串个数
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if (dp[i][j]) ans++;
} }
} return result;
return ans;
} }
} }
``` ```