给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
输入:"aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
本题可以利用中心扩散法解决,但是扩散时需要注意,有两种形式的回文子串,"abba"和"abcba",前者需要从空隙开始中心扩散,而后者需要从某个元素开始中心扩散,可设计两个不同的函数来实现这两点。
class Solution {
int getSubStr1(int index,int rightbound,String s){
int num=1;
int l=index-1,r=index+1;
while(l>=0&&r<rightbound){
if(s.charAt(l)==s.charAt(r)){
num++;
l--;
r++;
}else{
return num;
}
}
return num;
}
int getSubStr2(int index,int rightbound,String s){
int num=0;
int l=index,r=index+1;
while(l>=0&&r<rightbound){
if(s.charAt(l)==s.charAt(r)){
num++;
l--;
r++;
}else{
return num;
}
}
return num;
}
public int countSubstrings(String s) {
int ans=0;
for(int i=0;i<s.length();i++){
ans+=getSubStr1(i,s.length(),s);
ans+=getSubStr2(i,s.length(),s);
}
return ans;
}
}