問題:this
Given a string, your task is to count how many palindromic substrings in this string.spa
The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.遞歸
Example 1:字符串
Input: "abc" Output: 3 Explanation: Three palindromic strings: "a", "b", "c".
Example 2:input
Input: "aaa" Output: 6 Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".
Note:string
解決:it
① 計算字符串中迴文子串的個數,使用動態規劃解決:io
d[i][j]表示從i到j的字符串爲是否迴文,真則爲(1),不然爲假(0),class
那麼d[i][j]爲真的前提是:頭尾兩個字符串相同而且去掉頭尾之後的字串也是迴文(即d[i+1][j-1]爲真),這裏面要注意特殊狀況,即:去掉頭尾之後爲空串,因此若是j-i<3,而且頭尾相等,也是迴文的。di
class Solution { //22ms
public int countSubstrings(String s) {
int len = s.length();
int res = 0;
boolean[][] dp = new boolean[len][len];
for (int i = len - 1;i >= 0;i --){
for (int j = i;j < len;j ++){
dp[i][j] = ((s.charAt(i) == s.charAt(j) && ((j - i < 3) || dp[i + 1][j - 1])));
if (dp[i][j]){
res ++;
}
}
}
return res;
}
}
② 從中間向兩邊遞歸判斷迴文字符串。
class Solution { //12ms public int countSubstrings(String s) { if (s == null || s.length() == 0) return 0; int len = s.length(); int res = 0; for (int i = 0;i < len;i ++){ res += dfs(s,i,i); res += dfs(s,i,i + 1); } return res; } public int dfs(String s,int left,int right){ int res = 0; while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)){ left --; right ++; res ++; } return res; } }