def reverse_alternate_groups(s): groups = [] current_group = "" is_letter = s[0].isalpha() # Determine if the first character is a letter or digit # Step 1: Split the input string into groups of continuous letters and digits for char in s: if char.isalpha() == is_letter: # Same type (letter or digit) current_group += char else: # Type changes (letter to digit or digit to letter) groups.append(current_group) # Store the completed group current_group = char # Start a new group is_letter = char.isalpha() # Update the type groups.append(current_group) # Append the last group # Step 2: Reverse every alternate group of letters for i in range(len(groups)): if i % 2 == 0 and groups[i][0].isalpha(): # Reverse if the group is letters and at even index groups[i] = groups[i][::-1] # Step 3: Join the groups back into a single string return ''.join(groups) # Example usage input_str = "abc123def456ghi789jkl" output_str = reverse_alternate_groups(input_str) print(output_str) # Output: "cba123def456ihg789jkl"