思路:
法一:遍历每种长度的字符串,长度为1的,长度为2…从两边往中间,对左右字符进行比较,也就是双指针由两边往中间靠拢。
法二:以当前字符为中心,比较两边的字符,也就是双指针由中间往两边扩张。其中以当前字符为中心需要考虑两种情况,单个字符和两个字符。否则会有缺漏,不像法一,虽然暴力,但每种请况都考虑到。
int ans = 0;
public int countSubstrings(String s) {
ans = s.length();
//遍历每种长度的字符串
for(int len = 1; len < s.length(); len++){
int j= len;
for(int i = 0;j < s.length(); i++,j++){
judge(s,i,j);
}
}
return ans;
}
//两边往中间
public void judge(String s, int i, int j){
while(i <= j && s.charAt(i) == s.charAt(j)) {
i++;
j--;
}
if(i > j) ans++;
}
}
private int count = 0;
public int countSubstrings(String s) {
for(int i = 0; i < s.length(); i++) {
judge(s,i,i);//以单个为中心,最终串的长度为奇数
judge(s,i,i+1);//以两个为中心,最终串为偶数长度
}
return count;
}
//从中间往两边移动双指针
public void judge(String s, int left, int right) {
int l = s.length();
while(left >=0 && right < l && s.charAt(left) == s.charAt(right)) {
count++;
left--;
right++;
}
}