掘金刷题6 | 豆包MarsCode AI刷题

119 阅读3分钟

问题描述

小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'

完整代码

#include <iostream>
#include <string>
using namespace std;
// 执行一次变换
std::string transform(const std::string& s) {
    std::string result;
    for (char ch : s) {
        switch (ch) {
            case 'a':
                result += "bc";
                break;
            case 'b':
                result += "ca";
                break;
            case 'c':
                result += "ab";
                break;
        }
    }
    return result;
}

string solution(string s, int k) {
    // write code here
    std::string result = s;
    for (int i = 0; i < k; ++i) {
        result = transform(result);
    }
    return result;
    return "";
}

int main() {
    cout << (solution("abc", 2) == "caababbcbcca") << endl;
    cout << (solution("abca", 3) == "abbcbccabccacaabcaababbcabbcbcca") << endl;
    cout << (solution("cba", 1) == "abcabc") << endl;
    return 0;
}

思路分析

这段代码实现了一个字符串变换的功能,并且提供了一些测试用例来验证其正确性。以下是对代码的逐句分析:

  1. #include <iostream>:
    引入输入输出流库,用于处理标准输入输出操作。

  2. #include <string>:
    引入字符串库,用于处理C++的std::string对象。

  3. using namespace std;:
    使用标准命名空间,这样可以直接使用标准库中的标识符(如coutstring等)而不需要前缀std::

  4. // 执行一次变换:
    这是一个注释,解释了transform函数的功能。

  5. std::string transform(const std::string& s) {:
    定义了一个名为transform的函数,该函数接受一个字符串s作为输入,并返回一个新的字符串。const std::string& s表示输入字符串是常量引用,这样可以避免不必要的拷贝。

  6. std::string result;:
    transform函数内部,定义了一个空字符串result,用于存储变换后的结果。

  7. for (char ch : s) {:
    使用范围for循环遍历输入字符串s中的每一个字符ch

  8. switch (ch) {:
    使用switch语句根据字符ch的值执行不同的操作。

  9. case 'a': result += "bc"; break;:
    如果字符是'a',则在result后面追加字符串"bc"

  10. case 'b': result += "ca"; break;:
    如果字符是'b',则在result后面追加字符串"ca"

  11. case 'c': result += "ab"; break;:
    如果字符是'c',则在result后面追加字符串"ab"

  12. }:
    结束switch语句。

  13. return result;:
    返回变换后的字符串result

  14. }:
    结束transform函数的定义。

  15. string solution(string s, int k) {:
    定义了一个名为solution的函数,该函数接受一个字符串s和一个整数k作为输入,并返回一个新的字符串。

  16. std::string result = s;:
    solution函数内部,定义一个字符串result并初始化为输入字符串s

  17. for (int i = 0; i < k; ++i) {:
    使用for循环执行k次变换。每次循环都会调用transform函数对result进行变换。

  18. result = transform(result);:
    每次循环都会调用transform函数对当前的result进行变换,并将结果重新赋值给result

  19. }:
    结束for循环。

  20. return result;:
    返回经过k次变换后的字符串result

  21. return "";:
    这一行代码是多余的,因为函数已经在上一步返回了结果。

  22. }:
    结束solution函数的定义。

  23. int main() {:
    定义了main函数,这是程序的入口点。

  24. cout << (solution("abc", 2) == "caababbcbcca") << endl;:
    调用solution函数,并检查其返回值是否等于"caababbcbcca",如果相等则输出1,否则输出0

  25. cout << (solution("abca", 3) == "abbcbccabccacaabcaababbcabbcbcca") << endl;:
    调用solution函数,并检查其返回值是否等于"abbcbccabccacaabcaababbcabbcbcca",如果相等则输出1,否则输出0

  26. cout << (solution("cba", 1) == "abcabc") << endl;:
    调用solution函数,并检查其返回值是否等于"abcabc",如果相等则输出1,否则输出0

  27. return 0;:
    程序正常结束,返回值为0

  28. }:
    结束main函数的定义。