12312

def countSubstrings(self, s):
    """
    :type s: str
    :rtype: int
    """
    cnt = 0  # count of pallindromes encountered 
    if s:
        n   = len(s) 
        # a dynamic programming table, dp[i][j] = True if s[i:j+1] is pallindrome
        dp = [ [ True for j in range(n) ] for i in range(n) ] 

        # each character is pallindrome, so dp[i][i] = True
        # also counting pallindromes of length 1
        for i in range(n):
            dp[i][i]  = True
            cnt      += 1

        for length in range(2,n+1): # length ranges from 2 to n
            for start in range(n):  # start index ranges from 0 to n-1
                i =  start          
                j  = start + length - 1    # end index for a string of length "length" starting at index start 
                if 0 <= i < j < n:         # if indices are within string under consideration
                    dp[i][j] =  False
                    if s[i] == s[j] and dp[i+1][j-1] == True: # if s[i] == s[j] and s[i+1:j] is pallindrome
                        dp[i][j] = True
                        cnt += 1

    return cnt

results matching ""

    No results matching ""