leetcode-647. 回文子串

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;
}

 

posted on   老菜农  阅读(20)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

统计信息

点击右上角即可分享
微信分享提示