-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathPalindrome Pairs.py
42 lines (32 loc) · 1.3 KB
/
Palindrome Pairs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Solution:
def palindromePairs(self, words: List[str]) -> List[List[int]]:
m = {}
for i, word in enumerate(words):
m[word] = i
result = set()
for i, word in enumerate(words):
n, rev_word = len(word), word[::-1]
prefix, suffix = word, rev_word
for j in range(n+1):
if prefix == suffix:
key = rev_word[:j]
if key in m and m[key] != i:
result.add((m[key], i))
if j == n:
break
prefix = prefix[:-1]
suffix = suffix[1:]
# print('pre', i, result)
prefix, suffix = '', ''
for j in range(n+1):
if prefix == suffix:
if prefix == suffix:
key = rev_word[j:]
if key in m and m[key] != i:
result.add((i, m[key]))
if j == n:
break
prefix = word[n-j-1] + prefix
suffix = suffix + rev_word[j]
# print('post', i, result)
return list(result)