问题描述
小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;
}
思路分析
这段代码实现了一个字符串变换的功能,并且提供了一些测试用例来验证其正确性。以下是对代码的逐句分析:
-
#include <iostream>:
引入输入输出流库,用于处理标准输入输出操作。 -
#include <string>:
引入字符串库,用于处理C++的std::string对象。 -
using namespace std;:
使用标准命名空间,这样可以直接使用标准库中的标识符(如cout、string等)而不需要前缀std::。 -
// 执行一次变换:
这是一个注释,解释了transform函数的功能。 -
std::string transform(const std::string& s) {:
定义了一个名为transform的函数,该函数接受一个字符串s作为输入,并返回一个新的字符串。const std::string& s表示输入字符串是常量引用,这样可以避免不必要的拷贝。 -
std::string result;:
在transform函数内部,定义了一个空字符串result,用于存储变换后的结果。 -
for (char ch : s) {:
使用范围for循环遍历输入字符串s中的每一个字符ch。 -
switch (ch) {:
使用switch语句根据字符ch的值执行不同的操作。 -
case 'a': result += "bc"; break;:
如果字符是'a',则在result后面追加字符串"bc"。 -
case 'b': result += "ca"; break;:
如果字符是'b',则在result后面追加字符串"ca"。 -
case 'c': result += "ab"; break;:
如果字符是'c',则在result后面追加字符串"ab"。 -
}:
结束switch语句。 -
return result;:
返回变换后的字符串result。 -
}:
结束transform函数的定义。 -
string solution(string s, int k) {:
定义了一个名为solution的函数,该函数接受一个字符串s和一个整数k作为输入,并返回一个新的字符串。 -
std::string result = s;:
在solution函数内部,定义一个字符串result并初始化为输入字符串s。 -
for (int i = 0; i < k; ++i) {:
使用for循环执行k次变换。每次循环都会调用transform函数对result进行变换。 -
result = transform(result);:
每次循环都会调用transform函数对当前的result进行变换,并将结果重新赋值给result。 -
}:
结束for循环。 -
return result;:
返回经过k次变换后的字符串result。 -
return "";:
这一行代码是多余的,因为函数已经在上一步返回了结果。 -
}:
结束solution函数的定义。 -
int main() {:
定义了main函数,这是程序的入口点。 -
cout << (solution("abc", 2) == "caababbcbcca") << endl;:
调用solution函数,并检查其返回值是否等于"caababbcbcca",如果相等则输出1,否则输出0。 -
cout << (solution("abca", 3) == "abbcbccabccacaabcaababbcabbcbcca") << endl;:
调用solution函数,并检查其返回值是否等于"abbcbccabccacaabcaababbcabbcbcca",如果相等则输出1,否则输出0。 -
cout << (solution("cba", 1) == "abcabc") << endl;:
调用solution函数,并检查其返回值是否等于"abcabc",如果相等则输出1,否则输出0。 -
return 0;:
程序正常结束,返回值为0。 -
}:
结束main函数的定义。