【LeetCode】647. 回文子串 [C++]

【题目描述】

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

回文字符串 是正着读和倒过来读一样的字符串。

子字符串 是字符串中的由连续字符组成的一个序列。

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

 

【思路】

计算有多少个回文子串的最朴素方法就是枚举出所有的回文子串,而枚举出所有的回文字串又有两种思路,分别是:

1.枚举出所有的子串,然后再判断这些子串是否是回文;
2.枚举每一个可能的回文中心,然后用两个指针分别向左右两边拓展,当两个指针指向的元素相同的时候就拓展,否则停止拓展。


【代码】

class Solution {
public:
    int countSubstrings(string s) {
        int n=s.size();
        int l,r,ans=0;
        for(int i=0;i<2*n-1;++i)
        {
            l=i/2,r=l+(i&1);
            while(l+1&&n-r&&s[l]==s[r])
            {
                ++ans;
                --l;
                ++r;
            }
        }
        return ans;
    }
};

 

posted @ 2022-02-05 21:09  Jerry2km1  阅读(99)  评论(0)    收藏  举报