小D的“abc”变换问题| 豆包MarsCode AI刷题

161 阅读2分钟

题目描述如下:

小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. 理解变换规则

    • 'a' 变成 'bc'
    • 'b' 变成 'ca'
    • 'c' 变成 'ab'
  2. 逐步变换

    • 每次变换都会将当前字符串中的每个字符根据上述规则进行替换。
    • 重复这个过程 k 次。
  3. 数据结构选择

    • 使用 StringBuilder 来高效地构建和修改字符串。
  4. 算法步骤

    • 初始化一个 StringBuilder 来存储当前字符串。
    • 进行 k 次循环,每次循环中遍历当前字符串的每个字符,并根据规则生成新的字符串。
    • 更新当前字符串为新生成的字符串。
    • 最终返回变换后的字符串。

代码

public class Main {
    public static String solution(String s, int k) {
        // 初始字符串
        String current = s;
        // 进行 k 次变换
        for (int i = 0; i < k; i++) {
            // 创建一个新的字符串来存储当前变换的结果
            StringBuilder next = new StringBuilder();
            // 遍历当前字符串中的每个字符
            for (char c : current.toCharArray()) {
                // 根据变换规则生成新的字符串
                if (c == 'a') {
                    next.append("bc");
                } else if (c == 'b') {
                    next.append("ca");
                } else if (c == 'c') {
                    next.append("ab");
                }
            }
            
            // 更新当前字符串为变换后的结果
            current = next.toString();
        }
        
        // 返回最终结果
        return current;
    }

    public static void main(String[] args) {
        System.out.println(solution("abc", 2).equals("caababbcbcca"));
        System.out.println(solution("abca", 3).equals("abbcbccabccacaabcaababbcabbcbcca"));
        System.out.println(solution("cba", 1).equals("abcabc"));
    }
}

代码解释

  • 初始化String current = s; 初始化当前字符串为输入字符串 s
  • 循环变换for (int i = 0; i < k; i++) 进行 k 次变换。
  • 生成新字符串StringBuilder next = new StringBuilder(); 创建一个新的 StringBuilder 来存储每次变换的结果。
  • 遍历字符for (char c : current.toCharArray()) 遍历当前字符串中的每个字符,并根据规则生成新的字符串。
  • 更新字符串current = next.toString(); 将当前字符串更新为新生成的字符串。
  • 返回结果return current; 返回最终变换后的字符串。