回文子串的数目

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

输入:"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;

    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容