給定乙個字串,你的任務是計算這個字串中有多少個回文子串。
具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。
示例 1:
輸入: "abc"
輸出: 3
解釋: 三個回文子串: "a", "b", "c".
示例 2:
輸入: "aaa"
輸出: 6
說明: 6個回文子串: "a", "a", "a", "aa", "aa", "aaa".
注意:
輸入的字串長度不會超過1000。
狀態:dp[i][j]
表示substring[i, j]
是否為回文子串;
狀態轉換:
如果substring[i+1, j-1]
是回文子串,則dp[i][j] = substring[i, i] == substring[j, j]
,否則為false
,即dp[i][j] = (i + 1 >= j - 1 || d[i + 1][j - 1]) ? chs[i] == chs[j] : false;
class
solution
for(
int i = chs.length -
2; i >=
0; i--)}
return cnt;
}}
合併兩個for迴圈,精簡**如下:
class
solution}}
return cnt;
}}
時間複雜度:o(n
2)
o(n ^ 2)
o(n2);
空間複雜度:o(n
2)
o(n^2)
o(n2)。
中心擴充套件法
class
solution
return cnt;
}// c1 == c2時為單中心
// c1 != c2時為雙中心
private
intcountcenteron
(string s,
int c1,
int c2)
return count;
}}
時間複雜度:o(n
2)
o(n^2)
o(n2);
空間複雜度:o(1
)o(1)
o(1)
。
leetcode647 回文子串
給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。示例 輸入 aaaba 輸出 9 解釋 a aa a aa aaa a b aba a 奇回文 如 aba 和偶回文 如abba 歸一化處理 i 0123 47s...
leetcode 647 回文子串
給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。示例 1 輸入 abc 輸出 3 解釋 三個回文子串 a b c 示例 2 輸入 aaa 輸出 6 說明 6個回文子串 a a a aa aa aaa 注意 輸入...
LeetCode 647 回文子串
題目鏈結 題目描述 給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。示例輸入 abc 輸出 3 解釋 三個回文子串 a b c 輸入 aaa 輸出 6 說明 6個回文子串 a a a aa aa aaa 注意 ...