2026-03-14 21:37:31 +0300 MSK
The k-th Lexicographical String of All Happy Strings of Length n
Links
Code
class Solution:
def getHappyString(self, n: int, k: int) -> str:
# Calculate the total number of happy strings of length n
total = 3 * (1 << (n - 1))
# If k is greater than the total number of happy strings, return an empty string
if k > total:
return ""
result = ["a"] * n # Initialize result with 'a' characters
# Define mappings for the next smallest and greatest valid characters
next_smallest = {"a": "b", "b": "a", "c": "a"}
next_greatest = {"a": "c", "b": "c", "c": "b"}
# Calculate the starting indices for strings beginning with 'a', 'b', and 'c'
start_a = 1
start_b = start_a + (1 << (n - 1))
start_c = start_b + (1 << (n - 1))
# Determine the first character based on the value of k
if k < start_b:
result[0] = "a"
k -= start_a
elif k < start_c:
result[0] = "b"
k -= start_b
else:
result[0] = "c"
k -= start_c
# Iterate through the remaining positions in the result string
for char_index in range(1, n):
# Calculate the midpoint of the group for the current character position
midpoint = 1 << (n - char_index - 1)
# Determine the next character based on the value of k
if k < midpoint:
result[char_index] = next_smallest[result[char_index - 1]]
else:
result[char_index] = next_greatest[result[char_index - 1]]
k -= midpoint
return "".join(result)