3307. Find the K-th Character in String Game II
Alice and Bob are playing a game. Initially, Alice has a string
word = "a".
You are given a positive integerk. You are also given an integer arrayoperations, whereoperations[i]represents the type of theithoperation.Now Bob will ask Alice to perform all operations in sequence:
- If
operations[i] == 0, append a copy ofwordto itself.- If
operations[i] == 1, generate a new string by changing each character inwordto its next character in the English alphabet, and append it to the originalword. For example, performing the operation on"c"generates"cd"and performing the operation on"zb"generates"zbac".
Return the value of thekthcharacter inwordafter performing all the operations.
Note that the character'z'can be changed to'a'in the second type of operation.Example 1:
Input: k = 5, operations = [0,0,0]
Output: "a"
Explanation:
Initially,word == "a". Alice performs the three operations as follows:
- Appends
"a"to"a",wordbecomes"aa".- Appends
"aa"to"aa",wordbecomes"aaaa".- Appends
"aaaa"to"aaaa",wordbecomes"aaaaaaaa".Example 2:
Input: k = 10, operations = [0,1,0,1]
Output: "b"
Explanation:
Initially,word == "a". Alice performs the four operations as follows:
- Appends
"a"to"a",wordbecomes"aa".- Appends
"bb"to"aa",wordbecomes"aabb".- Appends
"aabb"to"aabb",wordbecomes"aabbaabb".- Appends
"bbccbbcc"to"aabbaabb",wordbecomes"aabbaabbbbccbbcc".
def kthCharacter(self, k: int, operations: List[int]) -> str:
n, i = 1, 0
while n < k:
n *= 2
i += 1
d = 0
while n > 1:
if k > n // 2:
k -= n // 2
d += operations[i - 1]
n //= 2
i -= 1
return chr(d % 26 + ord("a"))