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 2022-10-09 10:51  老菜农  阅读(16)  评论(0编辑  收藏  举报

导航