首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2025-05-02:找出第 K 个字符Ⅰ。用go语言,Alice 和 Bob 玩一个游戏。起初,Alice 有一个字符串,内容

2025-05-02:找出第 K 个字符Ⅰ。用go语言,Alice 和 Bob 玩一个游戏。起初,Alice 有一个字符串,内容

作者头像
福大大架构师每日一题
发布于 2025-05-02 23:45:36
发布于 2025-05-02 23:45:36
3820
举报

2025-05-02:找出第 K 个字符Ⅰ。用go语言,Alice 和 Bob 玩一个游戏。起初,Alice 有一个字符串,内容是 "a"。

给定一个正整数 k。

Bob 要求 Alice 不断重复操作:对当前字符串中的每个字符,都替换为该字符在字母表中的下一个字母(其中 'z' 替换成 'a'),然后把这些新字符连接到字符串的末尾。

比如,字符串 "c" 经过一次操作变成 "cd",字符串 "zb" 经过一次操作变成 "zbac"。

不断执行该操作,直到字符串长度不少于 k,然后返回字符串中的第 k 个字符。

1 <= k <= 500。

输入:k = 5。

输出:"b"。

解释:

最初,word = "a"。需要进行三次操作:

生成的字符串是 "b",word 变为 "ab"。

生成的字符串是 "bc",word 变为 "abbc"。

生成的字符串是 "bccd",word 变为 "abbcbccd"。

题目来自leetcode3304。

分步骤描述过程:

  1. 1. 初始状态:字符串初始为 "a",长度为1。
  2. 2. 操作过程:
    • • 每次操作将当前字符串中的每个字符替换为其在字母表中的下一个字符('z' 变为 'a'),然后将这些新字符连接到原字符串的末尾。
    • • 例如,第一次操作生成 "b",字符串变为 "ab";第二次操作生成 "bc",字符串变为 "abbc";第三次操作生成 "bccd",字符串变为 "abbcbccd"。
  3. 3. 确定操作次数:
    • • 字符串长度每次翻倍,经过 m 次操作后长度为 2^m。找到最小的 m 使得 2^m ≥ k。
  4. 4. 二进制分析:
    • • 将 k-1(转为0-based索引)表示为二进制数。每一位的1表示该字符在对应位置的操作中被生成。
    • • 例如,k=5 对应二进制 100(k-1=4),最高位为1,表示该字符在第三次操作生成的块中。
  5. 5. 计算字符值:
    • • 字符的最终值由初始值 'a' 加上二进制中1的个数。每个1对应一次操作,每次操作字符值递增。

时间复杂度和空间复杂度:

  • • 时间复杂度:O(log k),需要遍历 k-1 的二进制位数,最多 log₂k 次循环。
  • • 额外空间复杂度:O(1),仅使用常数空间存储中间变量。

Go完整代码如下:

代码语言:javascript
复制
package main

import (
    "fmt"
    "math/bits"
)

func kthCharacter(k int)byte {
    k--
    ans := byte('a')
    for i := bits.Len(uint(k)) - 1; i >= 0; i-- {
        if k >= 1<<i { // k 在右半边
            ans++
            k -= 1 << i
        }
    }
    return ans
}

func main() {
    k := 5
    result := kthCharacter(k)
    fmt.Printf("%c\r\n", result)
}

Python完整代码如下:

代码语言:javascript
复制
# -*-coding:utf-8-*-

defkth_character(k: int) -> str:
    k -= 1
    ans = ord('a')
    length = k.bit_length()
    for i inrange(length - 1, -1, -1):
        if k >= (1 << i):
            ans += 1
            k -= (1 << i)
    returnchr(ans)

if __name__ == "__main__":
    k = 5
    result = kth_character(k)
    print(result)

·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 分步骤描述过程:
  • 时间复杂度和空间复杂度:
  • Go完整代码如下:
  • Python完整代码如下:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档