python 3.x – Algorithm For Longest Palindrome

I made an brute force algorithm to find the longest palindrome within the string. This palindrome is a substring of the input. Below is the code.


def generate_substrings(string):
    """
    avg time: O(len(string) * len(string))
    avg space: O(1) 
    
    amortized time: O(len(string) * len(string)) 
    amortized space: O(1) 
    """ 
    col = 0 
    for row in range(len(string)):
        col = row + 1 
        while col < len(string) + 1:
            yield string(row:col)
            col = col + 1 
            
def test_generate_substrings():
    assert list(generate_substrings('')) == ()
    assert list(generate_substrings('a')) == ('a')
    assert list(generate_substrings('ab')) == ('a', 'ab', 'b')

def is_palindrome(string):
    """
    avg time: O(len(string)) 
    avg space: O(len(string)) 
    
    amortized time: O(len(string)) 
    amortized space: O(len(string)) 
    """
    return string(::-1) == string 

def test_is_palindrome():
    assert is_palindrome('') == True 
    assert is_palindrome('ab') == False 
    assert is_palindrome('bb') == True 
    assert is_palindrome('abc') == False 
    assert is_palindrome('ddd') == True 
    
def find_palindrome(string):
    """
    avg time: O(len(string) * len(string)) 
    avg space: O(len(string)) 
    
    amortized time: O(len(string) * len(string)) 
    amortized space: O(len(string))
    """
    answer = ''
    vec = () 
    
    for string in generate_substrings(string):
        if is_palindrome(string):
            vec.append(string)
    
    for string in vec:
        if len(answer) <= len(string):
            answer = string 
       
    return answer 

def test_find_palindrome():
    assert find_palindrome('ab') == 'b'
    assert find_palindrome('aa') == 'aa' 

def main():
"""
entry point for test code 
"""
    test_generate_substrings() 
    test_is_palindrome() 
    test_find_palindrome() 

if __name__ == '__main__':
    main()
 
```