Created
June 4, 2016 20:08
-
-
Save Tsunamicom/de41c47156a6f30ececbdd60bb90fb0b to your computer and use it in GitHub Desktop.
Longest Palindrome
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
def ispalindrome(string): | |
"""Given a string, returns True if it is a Palindrome. | |
Notes: Case insensitive, | |
Spaces considered: (' aba ') == True | |
""" | |
string = string.lower() | |
return string == string[::-1] # Returns True if Palindrome | |
def lpal(string): | |
"""Given a string, determines the maximum length Palindrome""" | |
if ispalindrome(string): | |
#print('Longest is full string {} with a length of {}'.format(string, len(string))) | |
return string | |
else: | |
maxlen = 0 | |
longest = str() | |
for i in range(1, len(string)): | |
j = len(string) | |
while j >= i: | |
substr = string[i-1:j+1] | |
if maxlen <= len(substr): | |
if ispalindrome(substr): | |
longest = substr | |
maxlen = len(substr) | |
#print(substr, ispalindrome(substr)) | |
j -= 1 | |
if maxlen == 0: | |
#print('No palindromes in string {}'.format(string)) | |
return False | |
else: | |
#print('Longest is {} with a length of {}.'.format(longest, maxlen)) | |
return longest | |
class PalindromeTest(unittest.TestCase): | |
# ============== TESTING ispalindrome() ===================== | |
def test_ispalindromeTrue(self): | |
self.assertEqual(ispalindrome('aba'), True) | |
self.assertEqual(ispalindrome('RoorooR'), True) | |
self.assertEqual(ispalindrome('1222222221'), True) | |
self.assertEqual(ispalindrome('a'), True) | |
self.assertEqual(ispalindrome(' a '), True) | |
self.assertEqual(ispalindrome(' 12 aba 21 '), True) | |
def test_ispalindromeFalse(self): | |
self.assertEqual(ispalindrome('1222222231'), False) | |
self.assertEqual(ispalindrome('1222222213'), False) | |
self.assertEqual(ispalindrome('12231313414'), False) | |
self.assertEqual(ispalindrome('testcase123'), False) | |
def test_ispalindromeError(self): | |
self.assertRaises(AttributeError, ispalindrome, 1224) | |
self.assertRaises(TypeError, ispalindrome) | |
# ============== TESTING lpal() ===================== | |
def test_lpalTrue(self): | |
self.assertEqual(lpal('abba'), 'abba') | |
self.assertEqual(lpal('abbbab'), 'abbba') | |
self.assertEqual(lpal('a'), 'a') | |
self.assertEqual(lpal('AAaaa7123333333321aaaAA'), '123333333321') | |
def test_lpalFalse(self): | |
self.assertEqual(lpal('abcdefg'), False) | |
self.assertEqual(lpal('123456789'), False) | |
self.assertEqual(lpal('No Palindromes'), False) | |
self.assertEqual(lpal('Whoa my darling!'), False) | |
def test_lpalError(self): | |
self.assertRaises(AttributeError, lpal, 1224) | |
self.assertRaises(TypeError, lpal) | |
if __name__ == '__main__': | |
unittest.main() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment