Leetcode 647. 回文子串 中等 字符串

647. 回文子串

题目:

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

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

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

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

 

示例 1:

输入:s = "abc"
输出:3
解释:三个回文子串: "a", "b", "c"

思路:

判断包含的回文子串的数目。

可以在判断回文串的过程中记录出现的次数。

回文子串判断可以是从(i,i)起始,也可以从(i,i+1)起始。两者统计的子串不同。

class Solution {
public:
    int countSubstrings(string s) {
        int n=s.size();
        int ret=0;
        for(int i=0;i<n;++i){
            ret+=count(i,i,s);
            ret+=count(i,i+1,s);
        }
        return ret;
    }
    int count(int i,int j, const string& s){
        int ret=0;
        int n=s.size();
        while(i>=0&&j<n){
            if(s[i]==s[j]){
                ret++;
                i--;
                j++;
            } else{
                break;
            }
        }
        return ret;
    }
};

 

posted @ 2022-05-06 16:16  鸭子船长  阅读(36)  评论(0)    收藏  举报