Using KMP algorithm.
Solution:
# T:O(n) S:O(n) class Solution: # @param {string} s # @return {string} def shortestPalindrome(self, s): if not s: return s A = s + s[::-1] prefix = self.getPrefix(A) i = prefix[-1] while i >= len(s): i = prefix[i] return s[i+1:][::-1] + s def getPrefix(self, pattern): prefix = [-1] * len(pattern) j = -1 for i in xrange(1, len(pattern)): while j > -1 and pattern[j+1] != pattern[i]: j = prefix[j] if pattern[j+1] == pattern[i]: j += 1 prefix[i] = j return prefixRun Time: 96 ms
No comments:
Post a Comment