Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- # from time import time
- class Node:
- def __init__(self, value):
- self.children = {}
- self.value = value
- self.terminates = False
- def __str__(self):
- return str(self.children)
- def __repr__(self):
- return str(self.children)
- def build_trie(words_list):
- trie = {}
- for word in words_list:
- items = trie
- for i, letter in enumerate(word):
- if letter not in items:
- items[letter] = Node(letter)
- if i == len(word)-1:
- items[letter].terminates = True
- items = items[letter].children
- return trie
- # def shift(letter, k):
- # new_ord = ord(letter) + k
- # if new_ord > ord('z'):
- # new_ord -= k_range + 1
- # return chr(new_ord)
- def search(word, k_range):
- for k in range(k_range+1):
- i = 0
- shifted_word = []
- items = trie
- while True:
- shifted_l = letters[(letters_indexes[word[i]] + k) % 26]
- try:
- node = items[shifted_l]
- items = node.children
- shifted_word.append(shifted_l)
- i += 1
- if i == len(word):
- if node.terminates:
- return ''.join(shifted_word)
- break
- except KeyError:
- break
- return ''
- if __name__ == "__main__":
- # text = 'abcd a abb bab abc'
- # words = ['q', 'bcc', 'aza', 'abc', 'z', 'def']
- text = input()
- n = int(input())
- words = []
- for i in range(n):
- words.append(input().strip('\n'))
- letters = 'abcdefghijklmnopqrstuvwxyz'
- letters_indexes = {letter: i for i, letter in enumerate(letters)}
- # time1 = time()
- # for i in range(10000):
- trie = build_trie(text.split(' '))
- if trie:
- res = []
- for word in words:
- if word:
- res.append(search(word, 26))
- os.write(1, str.encode("\n".join(res)))
- # print(time()-time1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement