Reverse Shuffle Merge

Sort by

recency

|

215 Discussions

|

  • + 0 comments

    If a secure and reliable gaming experience is what you’re after, BanzaiBet is the perfect choice. Their platform ensures safety with trusted payment methods like mobile and cryptocurrency options, which you can learn more about by visiting https://banzaibet-bd.com/ ,great platform. What’s more, their collection of slots is impressive, featuring themes inspired by everything from timeless classics to popular movies and video games. It’s a great spot for anyone

  • + 0 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)
    
  • + 0 comments

    I hate problems that require you to reread 50 times to just understand what they are asking you to do.

  • + 0 comments

    Worst problem statement ever. Unclear

  • + 0 comments
    def reverseShuffleMerge(s):
        from collections import Counter
    
        # Calculate the frequency of each character in s
        freq = Counter(s)
        
        # Calculate the required frequency for A
        required = {char: freq[char] // 2 for char in freq}
        
        # Initialize counts of used characters
        used = {char: 0 for char in freq}
        
        result = []
        # Iterate over the string in reverse order
        for char in reversed(s):
            if used[char] < required[char]:
                # Ensure that we are making the lexicographically smallest result
                while result and result[-1] > char and used[result[-1]] + freq[result[-1]] > required[result[-1]]:
                    removed_char = result.pop()
                    used[removed_char] -= 1
    
                result.append(char)
                used[char] += 1
            
            # Decrease the frequency count as we have processed this character
            freq[char] -= 1
        
        # Convert result list to a string and return
        return ''.join(result)