小D的 `abc` 变换问题 | 豆包MarsCode AI刷题

139 阅读2分钟

小D的 abc 变换问题

问题描述

小D拿到了一个仅由 "abc" 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换:

  • 将 'a' 变成 'bc'
  • 将 'b' 变成 'ca'
  • 将 'c' 变成 'ab'

小D将重复该操作 k 次。你的任务是输出经过 k 次变换后,得到的最终字符串。

例如:对于初始字符串 "abc",执行 2 次操作后,字符串将变为 "caababbcbcca"

解题思路

  1. 初始化:从初始字符串开始。
  2. 变换:每次变换时,遍历字符串中的每个字符,并根据规则生成新的字符串。
  3. 重复:重复上述变换 k 次。

代码实现

初始化

从输入的初始字符串s开始。题设保证这个字符串s仅由 "abc" 三种字母组成,因此不需要写用于判断s是否含有除 "abc" 以外其他字符的算法。

变换

这里构建一个自定义函数transform(s),用于遍历字符串s中的每个字符,并根据规则生成并返回新的字符串。要想判断一个字符是否符合变换规则,最简单的方式是使用if-elif-else语句。

具体代码如下:

def transform(s: str) -> str:
    result = ""
    for char in s:
        if char == 'a':
            result += 'bc'
        elif char == 'b':
            result += 'ca'
        elif char == 'c':
            result += 'ab'
    return result

除此之外,也可以选择将变换规则中的映射关系转换为字典replace_map,并使用该字典辅助变换字符串。具体代码如下:

replace_map = {
    "a": "bc",
    "b": "ca",
    "c": "ab"
}

def transform(s: str) -> str:
    result = ""
    for char in s:
        result += trans_map.get(char, char)
    return result

重复

将上述的函数transform(s)运行k次,并返回结果字符串s。此步骤使用for循环即可。具体代码如下:

for _ in range(k):
    s = transform(s)

return s

完整代码

def solution(s: str, k: int) -> str:
    # write code here
    def transform(s: str) -> str:
        result = ""
        for char in s:
            if char == 'a':
                result += 'bc'
            elif char == 'b':
                result += 'ca'
            elif char == 'c':
                result += 'ab'
        return result
    
    for _ in range(k):
        s = transform(s)
    
    return s

if __name__ == '__main__':
    print(solution("abc", 2) == 'caababbcbcca')
    print(solution("abca", 3) == 'abbcbccabccacaabcaababbcabbcbcca')
    print(solution("cba", 1) == 'abcabc')