|
1 | 1 | # python3
|
2 | 2 | import sys
|
| 3 | +import suffix_tree |
| 4 | +import queue |
| 5 | +from collections import namedtuple |
3 | 6 |
|
| 7 | +Edge = namedtuple('Edge', ['parent', 'node', 'start', 'len']) |
| 8 | + |
| 9 | +# BFS traversal on the tree |
| 10 | +def non_shared_substring(suffix_tree, len_text): |
| 11 | + |
| 12 | + fifo = queue.Queue() |
| 13 | + edge = Edge(-1, 0, 0, 0) |
| 14 | + fifo.put(edge) |
| 15 | + |
| 16 | + while not fifo.empty(): |
| 17 | + |
| 18 | + parent_edge = fifo.get() |
| 19 | + node = parent_edge.node |
| 20 | + parent = parent_edge.parent |
| 21 | + |
| 22 | + right_part = False |
| 23 | + end_left_part = True |
| 24 | + for child in suffix_tree.nodes[node]: |
| 25 | + |
| 26 | + child_edge = suffix_tree.nodes[node][child] |
| 27 | + |
| 28 | + right_part = True if child_edge.start > len_text else right_part |
| 29 | + end_left_part = end_left_part if child_edge.start == len_text else False |
| 30 | + |
| 31 | + if child_edge.start >= len_text: |
| 32 | + continue |
| 33 | + |
| 34 | + current_len = 0 if parent == -1 else suffix_tree.nodes[parent][node].len |
| 35 | + edge = Edge(node, child, parent_edge.start, current_len + parent_edge.len) |
| 36 | + fifo.put(edge) |
| 37 | + |
| 38 | + if len(suffix_tree.nodes[node]) == 0: |
| 39 | + print("Over here 2") |
| 40 | + edge = Edge(parent, node, parent_edge.start, parent_edge.len + 1) |
| 41 | + break |
| 42 | + |
| 43 | + elif (not right_part) and end_left_part: |
| 44 | + print("Over here 1: ", suffix_tree.nodes[node]) |
| 45 | + edge = Edge(parent, node, parent_edge.start, parent_edge.len) |
| 46 | + break |
| 47 | + |
| 48 | + return suffix_tree.text[edge.start:edge.start + edge.len] |
| 49 | + |
4 | 50 | def solve (p, q):
|
5 |
| - result = p |
6 |
| - return result |
| 51 | + pq_text = p + "#" + q + "$" |
| 52 | + |
| 53 | + suffixTree = suffix_tree.Suffix_Tree(pq_text) |
| 54 | + print(suffixTree.nodes) |
7 | 55 |
|
8 |
| -p = sys.stdin.readline ().strip () |
9 |
| -q = sys.stdin.readline ().strip () |
| 56 | + result = non_shared_substring(suffixTree, len(p)) |
| 57 | + |
| 58 | + return result |
10 | 59 |
|
11 |
| -ans = solve (p, q) |
| 60 | +if __name__ == "__main__": |
| 61 | + p = sys.stdin.readline ().strip () |
| 62 | + q = sys.stdin.readline ().strip () |
12 | 63 |
|
13 |
| -sys.stdout.write (ans + '\n') |
| 64 | + ans = solve (p, q) |
| 65 | + sys.stdout.write (ans + '\n') |
0 commit comments