DP:
1 class Solution { 2 public int countSubstrings(String s) { 3 if (s == null || s.length() == 0) return 0; 4 int res = 0; 5 boolean[][] dp = new boolean[s.length()][s.length()]; 6 for (int i = s.length() - 1; i >= 0; i --) { 7 for (int j = i; j < s.length(); j ++) { 8 if (s.charAt(i) == s.charAt(j) && (j - i <= 2 || dp[i + 1][j - 1])) { 9 dp[i][j] = true; 10 res ++; 11 } 12 } 13 } 14 return res; 15 } 16 }Extend palindrome: (better)
1 public class Solution { 2 int count = 0; 3 4 public int countSubstrings(String s) { 5 if (s == null || s.length() == 0) return 0; 6 7 for (int i = 0; i < s.length(); i++) { // i is the mid point 8 extendPalindrome(s, i, i); // odd length; 9 extendPalindrome(s, i, i + 1); // even length 10 } 11 12 return count; 13 } 14 15 private void extendPalindrome(String s, int left, int right) { 16 while (left >=0 && right < s.length() && s.charAt(left) == s.charAt(right)) { 17 count++; left--; right++; 18 } 19 } 20 }
转载于:https://www.cnblogs.com/EdwardLiu/p/11612467.html