pinocchio

largest palindrome in a word

Jan 5th, 2012
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.92 KB | None | 0 0
  1.  
  2. DEBUG = True
  3.  
  4. def largest_palindrome_in (uString):
  5.     i = 0
  6.     stack = []
  7.     string = uString
  8.     current_palindrome = ""
  9.     largest_palindrome = ""
  10.  
  11.     while True:
  12.  
  13.         if DEBUG:
  14.             print "String: \"" + string + "\""
  15.             print "Stack:" + str (stack)
  16.  
  17.         if len (string) == 0: break
  18.  
  19.         ## if no palindrome currently found
  20.         if current_palindrome == "":
  21.  
  22.             ## get the first element of the string,
  23.             ## push it onto the stack
  24.             stack.append (string[0])
  25.             string = string [1:]
  26.  
  27.             ## like in "abba"
  28.             if len (string) != 0 and stack[-1] == string[0]:
  29.                 current_palindrome = stack[-1] + string[0]
  30.                 stack.pop ()
  31.                 string = string[1:]
  32.                
  33.             ## like in "abcba"
  34.             elif len (string) > 1 and stack[-1] == string [1]:
  35.                 current_palindrome = stack [-1] + string [:2]
  36.                 stack.pop ()
  37.                 string = string [2:]
  38.                
  39.             ## no palindrome found
  40.             ## go on
  41.             else: pass
  42.  
  43.         ## a palindrome has been found
  44.         else:
  45.             ## if the palindrome is broken
  46.             ## then, restore the stack and delete the current palindrome
  47.             if len (stack) == 0 or stack[-1] != string[0]:
  48.                 stack = list (uString[:i])
  49.                 current_palindrome = ""
  50.                
  51.  
  52.             ## else, the palindrome grows, i.e. stack[-1] == string[0]
  53.             else:
  54.                 current_palindrome = stack[-1] + current_palindrome + string[0]
  55.                 stack.pop ()
  56.                 string = string [1:]
  57.                
  58.                 ## check whether the current palindrome is larger than the stored one
  59.                 ## if so, substitute it!
  60.                 if len (current_palindrome) > len (largest_palindrome):
  61.                     largest_palindrome = current_palindrome
  62.         i += 1
  63.  
  64.         if DEBUG:
  65.             print "Palindrome detected: " + current_palindrome + "\n"
  66.            
  67.     return largest_palindrome
  68.  
  69.  
  70. if __name__ == "__main__":
  71.     ## work
  72.     print "\nLargest palindrome in \"hello\" is " + largest_palindrome_in ("hello") + "\n"
  73.     print "\nLargest palindrome in \"abba\" is " + largest_palindrome_in ("abba") + "\n"
  74.     print "\nLargest palindrome in \"racecar\" is " + largest_palindrome_in ("racecar") + "\n"
  75.     print "\nLargest palindrome in \"abcdcbaee\" is " + largest_palindrome_in ("abcdcbaee") + "\n"
  76.     print "\nLargest palindrome in \"abcdcbaefghijkjihgfe\" is " + largest_palindrome_in ("abcdcbaefghijkjihgfe") + "\n"
  77.  
  78.     ## doesn't work
  79.     print "\nLargest palindrome in \"abcdcbaeeeeeeeeeeeeeeeeee\" is " + largest_palindrome_in ("abcdcbaeeeeeeeeeeeeeeeeee") + "\n"
  80.     print "\nLargest palindrome in \"ababababababababababababa\" is " + largest_palindrome_in ("abababababa") + "\n"
Advertisement
Add Comment
Please, Sign In to add comment