问题描述
小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'
问题分析
- 映射函数
transform
- 函数根据字符返回对应的替换字符串。'a' -> "bc",'b' -> "ca",'c' -> "ab"
- 字符串变换
对输入的字符串 s 执行 k 次操作,每次将字符串中的每个字符替换为对应的字符串。每次变换时字符串的长度会增加,因此需要更新字符串。
- 算法流程
- 从初始字符串
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;
}