publicintcountSubstrings(String s){ // Assume s is not null int n = s.length(); int count = 0; for (int i = 0; i < n; ++i) { for (int j = i; j < n; ++j) { // check if substring [i, j] is palindromic if (isPalindromic(s, i, j)) ++count; } } return count; }
privatebooleanisPalindromic(String s, int lo, int hi){ int n = hi - lo + 1; for (int i = 0; i < n / 2; ++i) { if (s.charAt(lo + i) != s.charAt(hi - i)) returnfalse; } returntrue; }
publicintcountSubstrings(String s){ // Assume s is not null int n = s.length(); int count = 0; for (int i = 0; i < n; ++i) { count += countPalindrome(s, i, i); // odd length count += countPalindrome(s, i, i + 1); // even length } return count; }
privateintcountPalindrome(String s, int lo, int hi){ int n = s.length(); int count = 0; while (lo >= 0 && hi < n && s.charAt(lo) == s.charAt(hi)) { ++count; --lo; ++hi; } return count; }