Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DEBUG = True
- def largest_palindrome_in (uString):
- i = 0
- stack = []
- string = uString
- current_palindrome = ""
- largest_palindrome = ""
- while True:
- if DEBUG:
- print "String: \"" + string + "\""
- print "Stack:" + str (stack)
- if len (string) == 0: break
- ## if no palindrome currently found
- if current_palindrome == "":
- ## get the first element of the string,
- ## push it onto the stack
- stack.append (string[0])
- string = string [1:]
- ## like in "abba"
- if len (string) != 0 and stack[-1] == string[0]:
- current_palindrome = stack[-1] + string[0]
- stack.pop ()
- string = string[1:]
- ## like in "abcba"
- elif len (string) > 1 and stack[-1] == string [1]:
- current_palindrome = stack [-1] + string [:2]
- stack.pop ()
- string = string [2:]
- ## no palindrome found
- ## go on
- else: pass
- ## a palindrome has been found
- else:
- ## if the palindrome is broken
- ## then, restore the stack and delete the current palindrome
- if len (stack) == 0 or stack[-1] != string[0]:
- stack = list (uString[:i])
- current_palindrome = ""
- ## else, the palindrome grows, i.e. stack[-1] == string[0]
- else:
- current_palindrome = stack[-1] + current_palindrome + string[0]
- stack.pop ()
- string = string [1:]
- ## check whether the current palindrome is larger than the stored one
- ## if so, substitute it!
- if len (current_palindrome) > len (largest_palindrome):
- largest_palindrome = current_palindrome
- i += 1
- if DEBUG:
- print "Palindrome detected: " + current_palindrome + "\n"
- return largest_palindrome
- if __name__ == "__main__":
- ## work
- print "\nLargest palindrome in \"hello\" is " + largest_palindrome_in ("hello") + "\n"
- print "\nLargest palindrome in \"abba\" is " + largest_palindrome_in ("abba") + "\n"
- print "\nLargest palindrome in \"racecar\" is " + largest_palindrome_in ("racecar") + "\n"
- print "\nLargest palindrome in \"abcdcbaee\" is " + largest_palindrome_in ("abcdcbaee") + "\n"
- print "\nLargest palindrome in \"abcdcbaefghijkjihgfe\" is " + largest_palindrome_in ("abcdcbaefghijkjihgfe") + "\n"
- ## doesn't work
- print "\nLargest palindrome in \"abcdcbaeeeeeeeeeeeeeeeeee\" is " + largest_palindrome_in ("abcdcbaeeeeeeeeeeeeeeeeee") + "\n"
- print "\nLargest palindrome in \"ababababababababababababa\" is " + largest_palindrome_in ("abababababa") + "\n"
Advertisement
Add Comment
Please, Sign In to add comment