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

75 阅读2分钟

问题描述

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

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

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

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


测试样例

样例1:

输入:s = "abc", k = 2
输出:'caababbcbcca'

样例2:

输入:s = "abca", k = 3
输出:'abbcbccabccacaabcaababbcabbcbcca'

样例3:

输入:s = "cba", k = 1
输出:'abcabc'

思路

这个题要求连续进行某变化k次,因此构造外层循环for _ in range(0,k): 内层循环遍历s进行依次处理。具体处理过程如下: 1,用ns储存一个空字符串 2,对于s里面的每一个字符,按照对应要求添加到ns里面 3,每次循环完成,更新s和ns

代码

def solution(s: str, k: int) -> str:
    ns = ""
    for _ in range(0, k):
        for char in s:
            if char == 'a':
                ns += "bc"
            if char == 'b':
                ns += "ca"
            if char == 'c':
                ns += "ab"
        # 更新s 和 ns
        s = ns
        ns = ""
            
    return s
    
if __name__ == '__main__':
    print(solution("abc", 2) == 'caababbcbcca')
    print(solution("abca", 3) == 'abbcbccabccacaabcaababbcabbcbcca')
    print(solution("cba", 1) == 'abcabc')

解释

这段代码定义了一个名为 solution 的函数,接收两个参数:一个字符串 s 和一个整数 k。函数的目的是根据特定规则对字符串进行转换,重复进行 k 次。以下是代码的逐步解析:

  1. 初始化:函数内部定义了一个空字符串 ns,用来存储每轮转换后生成的新字符串。

  2. 外层循环for _ in range(0, k):表示这段转换操作需要运行 k 次。

  3. 内层循环for char in s: 遍历当前字符串 s 中的每个字符 char

  4. 字符转换:

    • 如果字符是 'a',则在 ns 中添加 'bc'
    • 如果字符是 'b',则在 ns 中添加 'ca'
    • 如果字符是 'c',则在 ns 中添加 'ab'
  5. 更新字符串:完成内层循环后,使用新的字符串 ns 来替换原来的字符串 s,同时重置 ns 为一个空字符串,为下一个外层循环做准备。

  6. 返回结果:最终返回转换后的字符串 s,经过 k 次转换。

测试部分

if __name__ == '__main__': 下面,代码用一系列测试来检查 solution 函数的输出是否符合预期。这些测试对函数的调用与返回值进行了比较,确认结果是否正确。

总结

这个函数的主要功能是对输入字符串按照特定规则进行 k 次的字符替换。具体的替换规则如下:

  • 'a' 被替换为 'bc'
  • 'b' 被替换为 'ca'
  • 'c' 被替换为 'ab'