647. 回文子串

1. 题目描述

来源: https://leetcode-cn.com/problems/palindromic-substrings/

2. 思路

2.1 中心拓展

对于s中任何一个字符s[i],均有可能是一个回文子串的中心位置,因此可以以s[i]为着手点,同时向两边发散,若左右两边的元素相同,则说明找到一个回文子串,回文子串数量加一。这是子串数量为奇数的情况,对于偶数个字符的子串,可以以两个连续字符s[i]s[i+1]分别为向左和向右拓展的起始点向两边拓展。

代码(Java)

class Solution {
    private int result = 0;

    private void ext(String s, int n, int tl, int tr){
        while(true){
            if(tl>=0 && tr<n && s.charAt(tl)==s.charAt(tr)){
                result++;
                tl--;
                tr++;
                continue;
            }
            break;
        }
    }

    public int countSubstrings(String s) {
        int n = s.length();

        for(int i = 0; i < n; i++){
            // 2n
            int ToLeft = i;
            int ToRight = i+1;
            ext(s, n, ToLeft, ToRight);

            // 2n + 1
            // ToLeft = i;
            ToRight = i;
            ext(s, n, ToLeft, ToRight);
        }

        return result;
    }
}
posted on 2021-10-23 16:53  滔特特  阅读(36)  评论(0编辑  收藏  举报