1. 程式人生 > >【LeetCode】647. 迴文子串

【LeetCode】647. 迴文子串

題目連結https://leetcode-cn.com/problems/palindromic-substrings/description/

題目描述

給定一個字串,你的任務是計算這個字串中有多少個迴文子串。

具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。

示例

輸入: “abc”
輸出: 3
解釋: 三個迴文子串: “a”, “b”, “c”.

輸入: “aaa”
輸出: 6
說明: 6個迴文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.

注意:
輸入的字串長度不會超過1000。

解決方法

基於

5. 最長迴文子串

//基於5. 最長迴文子串
class Solution {
public:
    int countSubstrings(string s) {
        if (s.size()==0) return 0;
        
        bool dp[1001][1001]={false};
        int num=0;
        //初始化dp
        for (int i=0;i<s.size();i++){
            dp[i][i]=true;num++;
            if (i<s.size()-1 &&
s[i]==s[i+1]){ dp[i][i+1]=true; num++; } } //dp轉移 for (int len=3;len<=s.size();len++){//len表示子串長度 for (int i=0;i<=s.size()-len;i++){ dp[i][i+len-1]=(dp[i+1][i+len-2] && (s[i]==s[i+len-1])); if
(dp[i][i+len-1]){ num++; } } } //得到結果 return num; } };