题目来自力扣 3304. 找出第 K 个字符 I - 力扣(LeetCode)
记录每日刷题学习过程,如有侵权问题,联系作者删除。
欢迎有意向的同学们交流学习。
一、题目描述
Alice 和 Bob 正在玩一个游戏。最初,Alice 有一个字符串 word = "a"
。
给定一个正整数 k
。
现在 Bob 会要求 Alice 执行以下操作 无限次 :
-
将
word
中的每个字符 更改 为英文字母表中的 下一个 字符来生成一个新字符串,并将其 追加 到原始的word
。
例如,对 "c"
进行操作生成 "cd"
,对 "zb"
进行操作生成 "zbac"
。
在执行足够多的操作后, word
中 至少 存在 k
个字符,此时返回 word
中第 k
个字符的值。
注意,在操作中字符 'z'
可以变成 'a'
。
示例1:
输入:k = 5
输出:"b"
解释:
最初,
word = "a"
。需要进行三次操作:
生成的字符串是
"b"
,word
变为"ab"
。生成的字符串是
"bc"
,word
变为"abbc"
。生成的字符串是
"bccd"
,word
变为"abbcbccd"
示例2:
输入:k = 10
输出:"c"
二、思路笔记
1、根据题目中要求的操作,每次操作后,字符串word的长度为变为之前的 2 倍。
2、最终返回结果,只需要取得第k个字符,不需要遍历到最后一次操作。
在每次操作时,如果长度不足k,则遍历word,为字符的ascii值加一后,添加至word结尾。
三、代码
class Solution:
def kthCharacter(self, k: int) -> str:
word = "a"
for i in range(k):
if len(word) >= k:
break
else:
temp = ""
for s in word:
if s == 'z':
temp += 'a'
else:
temp += chr(ord(s) + 1)
word += temp
return word[k - 1]