青训营X豆包MarsCode 技术训练营 字节青训营笔记10| 豆包MarsCode AI刷题

74 阅读1分钟

问题描述

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

问题分析

  1. 映射函数 transform
  1. 函数根据字符返回对应的替换字符串。'a' -> "bc",'b' -> "ca",'c' -> "ab"
  1. 字符串变换

对输入的字符串 s 执行 k 次操作,每次将字符串中的每个字符替换为对应的字符串。每次变换时字符串的长度会增加,因此需要更新字符串。

  1. 算法流程
  1. 从初始字符串 s 开始,执行 k 次操作。每次操作中,遍历字符串中的每个字符,使用映射函数 transform 来生成新的字符串。最终返回变换后的字符串。

代码如下

#include <iostream>
#include <string>
using namespace std;

string transform(char c) {
    if (c == 'a') return "bc";
    if (c == 'b') return "ca";
    if (c == 'c') return "ab";
    return "";  
}

string solution(string s, int k) {
    // 执行 k 次操作
    for (int i = 0; i < k; ++i) {
        string new_str = "";
        // 对字符串中的每个字符进行替换
        for (char c : s) {
            new_str += transform(c);  /
        }
        s = new_str;  
    }
    return s;
}

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