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
An unexpected error occurred. Please try reloading the page. If problem persists, please contact support@hackerrank.com
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