You are viewing a single comment's thread. Return to all comments →
O(n) time complexity because even with nested while loop an element of s is only pushed and popped a maximum of 1 times
from collections import Counter def reverseShuffleMerge(s): char_counts = Counter(s) required = Counter() for key, value in char_counts.items(): required[key] = value // 2 last_char = s[-1] char_counts[last_char] -= 1 required[last_char] -= 1 result = [last_char] for i in range(len(s)-2, -1, -1): char = s[i] char_counts[char] -= 1 if not required[char]: pass elif (not result) or (char >= result[-1]): result.append(char) required[char] -= 1 else: while result and char < result[-1] and char_counts[result[-1]] >= required[result[-1]] +1: old_char = result.pop(-1) required[old_char] += 1 result.append(char) required[char] -= 1 return "".join(result)
Seems like cookies are disabled on this browser, please enable them to open this website
Reverse Shuffle Merge
You are viewing a single comment's thread. Return to all comments →
O(n) time complexity because even with nested while loop an element of s is only pushed and popped a maximum of 1 times