Skip to content

Instantly share code, notes, and snippets.

@Tsunamicom
Created June 4, 2016 20:08
Show Gist options
  • Save Tsunamicom/de41c47156a6f30ececbdd60bb90fb0b to your computer and use it in GitHub Desktop.
Save Tsunamicom/de41c47156a6f30ececbdd60bb90fb0b to your computer and use it in GitHub Desktop.
Longest Palindrome
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