I am trying to solve the problem "How many palindromic substrings can you find in string s" in the same way that you might solve the problem "Find the Longest Palindromic Substring in String s". That is, I would like to use the Longest Palindromic Subsequence Pattern to solve this problem. I know you can expand from the centre of each character and check if it is a palindrome, but I would like to see how to solve this problem in using the mentioned pattern.
Here is the working code to compute the longest palindromic substring.
var longestPalindrome = function(s) {
const fn = (start, end) => {
if (start > end) return "";
if (start === end) return s[start];
if (s[start] === s[end]) {
const innerSearchSpaceSize = end - start - 1;
const lonestPalindromeFromInnerSearchSpace = fn(start + 1, end - 1);
if (innerSearchSpaceSize === lonestPalindromeFromInnerSearchSpace.length)
return s[start] + lonestPalindromeFromInnerSearchSpace + s[end];
}
const longestPalindromeFromRightSide = fn(start + 1, end);
const longestPalindromeFromLeftSide = fn(start, end - 1);
return longestPalindromeFromRightSide.length >
longestPalindromeFromLeftSide.length
? longestPalindromeFromRightSide
: longestPalindromeFromLeftSide;
};
return fn(0, s.length - 1);
};
Here is my attempt at solving the count of all palindromic substrings.
var countPalindromes = function (s) {
const fn = (start, end) => {
if (start > end) return 0;
if (start === end) return 1;
if (s[start] === s[end]) return fn(start + 1, end - 1) + 3;
return fn(start + 1, end) + fn(start, end - 1) - fn(start + 1, end - 1);
};
return fn(0, s.length - 1);
};
Note: I know I need to use memoization on these problems. I am omitting that for now and just focusing on the recursion.