You are viewing a single comment's thread. Return to all comments →
import bisect from collections import defaultdict, deque from itertools import chain def longest_increasing_subsequence_length(s): lis, covers, last_cover_members = deque(), defaultdict(list), [] for c in s: i = bisect.bisect_left(last_cover_members, c) covers[i].append(c) if i >= len(last_cover_members): last_cover_members.append(c) else: last_cover_members[i] = c return len(last_cover_members) def commonChild(s1, s2): indices_sorted_rev = defaultdict(list) for i in range(len(s2) - 1, -1, -1): indices_sorted_rev[s2[i]].append(i) indices_of_s1_chars_in_s2_rev_sorted = list( chain.from_iterable( (indices_sorted_rev[c] for c in s1) ) ) if not indices_of_s1_chars_in_s2_rev_sorted: return 0 return longest_increasing_subsequence_length( indices_of_s1_chars_in_s2_rev_sorted )
Seems like cookies are disabled on this browser, please enable them to open this website
Common Child
You are viewing a single comment's thread. Return to all comments →