647. 回文子串
回文子串是指这个子串正着读反着读读得内容都一样,比如aaa,有以下回文字串a,a,a,aa,,aa,aaa,字符虽然一样但不是同一个字符仍然被看作一个子串
我们可以使用双指针中心扩展法解决这个问题
-
一个字符串中心只能有两个或者一个,如果有3个,那么他已经是一个回文子串了
-
中心的个数怎么算,比如abab这个字符串,从左往右依次数,它的中心有a,ab,b,ba,a,ab,b七个,中心就是可以进行扩展到字符,可以说是两个相邻或者单个字符
-
根据归纳法,我们可以总结出中心的个数 =
2*s.length() - 1
-
左指针:如果此时中心为1个字符,左指针=右指针=中心,如果有两个字符,左指针代表左边那个中心,
left = center / 2
-
右指针:如果此时中心为2个字符,右指针代表右边那个中心,
right = center % 2 + left
public int countSubstrings(String s) {
int res = 0;
int length = s.length();
for(int center = 0; center < 2 * length - 1; center++){
int left = center/2;
int right = left + center%2;
while(left >= 0 && right <= length && s.charAt(left) == s.charAt(right)){
left--;
right++;
res++;
}
}
return res;
}
标签:子串,center,int,647,left,指针,leetcode,回文 From: https://www.cnblogs.com/phonk/p/16771381.html