力扣打卡:剑指 Offer II 020. 回文子字符串的个数
解题思路
重点: 回文串最重要的是两个基本的中心
- 一个字符就是一个回文串
- 两个相等的字符就是一个回文串
- 其他的情况都可以通过这两种最基本的情况推理得到
判断单个字符
for(int i=0; i<len; i++){ // 判断单个字符的情况
int left=i,right=i;
while(left>=0 && right<len && s.charAt(left)==s.charAt(right)){ // 左右进行拓展,判断是否相等
left--;
right++;
cnt++;
}
}
判断两个字符
for(int i=0; i<len-1; i++){ // 判断两个字符的情况
int left=i, right=i+1;
while(left>=0 && right<len && s.charAt(left)==s.charAt(right)){ // 左右进行拓展,判断是否相等
left--;
right++;
cnt++;
}
}
代码
class Solution {
public int countSubstrings(String s) {
// 回文串最基本的情况
// 一个字符是一个回文串,两个相等的字符是一个回文串
// 其他的情况可以通过这两种基本的情况推到
int len = s.length();
int cnt = 0;
for(int i=0; i<len; i++){ // 判断单个字符的情况
int left=i,right=i;
while(left>=0 && right<len && s.charAt(left)==s.charAt(right)){ // 左右进行拓展,判断是否相等
left--;
right++;
cnt++;
}
}
for(int i=0; i<len-1; i++){ // 判断两个字符的情况
int left=i, right=i+1;
while(left>=0 && right<len && s.charAt(left)==s.charAt(right)){ // 左右进行拓展,判断是否相等
left--;
right++;
cnt++;
}
}
return cnt; // 两个基本情况的判断可以合并,但是合并后隐藏了一些逻辑,分开判断更易懂
}
}