算法题 29 小D的 `abc` 变换问题(c++)

25 阅读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'

代码

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

string solution(string s, int k) {
    string st;
    for(int i = 0 ; i < s.length()  ; i ++)
    {
        if(s[i] == 'a') st += "bc";
        else if(s[i] == 'b') st += "ca";
        else st += "ab";
    }
    if(k == 1 ) return st;
    return solution(st,k-1);
}

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

思路

按照题目的要求去构造,然后递归