3304. 找出第 K 个字符 I
题目描述
Alice 和 Bob 正在玩一个游戏。最初,Alice 有一个字符串 word = "a"。
给定一个正整数 k。
现在 Bob 会要求 Alice 执行以下操作 无限次 :
- 将
word中的每个字符 更改 为英文字母表中的 下一个 字符来生成一个新字符串,并将其 追加 到原始的word。
例如,对 "c" 进行操作生成 "cd",对 "zb" 进行操作生成 "zbac"。
在执行足够多的操作后, word 中 至少 存在 k 个字符,此时返回 word 中第 k 个字符的值。
示例 1:
输入:k = 5
输出:"b"
解释:
最初,word = "a"。需要进行三次操作:
- 生成的字符串是
"b",word变为"ab"。 - 生成的字符串是
"bc",word变为"abbc"。 - 生成的字符串是
"bccd",word变为"abbcbccd"。
示例 2:
输入:k = 10
输出:"c"
提示:
1 <= k <= 500
解法
方法一:模拟
思考
每次操作把当前串每位字母后移一位再拼到末尾,长度翻倍。\(k \le 500\),直接模拟直到长度不小于 \(k\) 即可。
不必真正维护字符串对象:用 \(0..25\) 表示相对 \(\texttt{a}\) 的偏移,复制时统一加一并对 \(26\) 取模。
长度足够后取下标 \(k-1\) 对应的字母。
我们可以使用一个数组 \(\textit{word}\) 来存储每次操作后的字符串,当 \(\textit{word}\) 的长度小于 \(k\) 时,我们不断地对 \(\textit{word}\) 进行操作。
最后返回 \(\textit{word}[k - 1]\) 即可。
时间复杂度 \(O(k)\),空间复杂度 \(O(k)\)。其中 \(k\) 为输入参数。
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |