【LeetCode】647. 迴文子串
阿新 • • 發佈:2018-11-03
題目連結: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;
}
};