Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. def palindromeSubStrings(S):
  2. uniquePalindromeSubstrings = dict()
  3. n = len(S)
  4.  
  5. # Table for storing results, 2 rows for odd-
  6. # and even-length palindromes
  7. resultsTable = [[0 for x in range(n+1)] for y in range(2)]
  8.  
  9. # Find all sub-string palindromes from the given input
  10. # Insert square brackets before and after the string
  11. # to iterate easily over the string S
  12. S = "[" + S + "]"
  13.  
  14. for j in range(2):
  15. palindromeRadius = 0 # length of 'palindrome radius'
  16. resultsTable[j][0] = 0
  17.  
  18. i = 1
  19. while i <= n:
  20.  
  21. # Expand palindrome centered at i
  22. while S[i - palindromeRadius - 1] == S[i + j + palindromeRadius]:
  23. palindromeRadius += 1 # Incrementing the length of palindromic
  24. # radius as and when we find valid palindrome
  25.  
  26. # Assign the found palindromic length to odd/even
  27. # length array
  28. resultsTable[j][i] = palindromeRadius
  29. k = 1
  30. while (resultsTable[j][i - k] != palindromeRadius - k) and (k < palindromeRadius):
  31. resultsTable[j][i+k] = min(resultsTable[j][i-k], palindromeRadius - k)
  32. k += 1
  33. palindromeRadius = max(palindromeRadius - k, 0)
  34. i += k
  35.  
  36. # remove the square brackets for the string put previously
  37. S = S[1:len(S)-1]
  38.  
  39. # Insert all obtained palindromes in a hash map/dictionary to
  40. # find only unique palindrome
  41. uniquePalindromeSubstrings[S[0]] = 1
  42. for i in range(1,n):
  43. for j in range(2):
  44. for palindromeRadius in range(resultsTable[j][i],0,-1):
  45. uniquePalindromeSubstrings[S[i - palindromeRadius - 1 : i - palindromeRadius - 1 + 2 * palindromeRadius + j]] = 1
  46. uniquePalindromeSubstrings[S[i]] = 1
  47.  
  48. # printing all unique palindromic substrings from the hash map
  49. palindromeSubstringsCount = 0
  50. for i in uniquePalindromeSubstrings:
  51. palindromeSubstringsCount += 1
  52. print(i)
  53. print("Palindrome Substrings Count =",palindromeSubstringsCount)
  54.  
  55.  
  56. palindromeSubStrings("bananananananananananananananananananana")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement