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

79 阅读2分钟

问题描述

小D拿到了一个仅由 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换:"abc"

  • 将 变成 'a'``'bc'
  • 将 变成 'b'``'ca'
  • 将 变成 'c'``'ab'

小D将重复该操作 次。你的任务是输出经过 次变换后,得到的最终字符串。k``k

例如:对于初始字符串 ,执行 2 次操作后,字符串将变为 。"abc"``"caababbcbcca"


测试样例

样例1:

输入:
输出:s = "abc", k = 2``'caababbcbcca'

样例2:

输入:
输出:s = "abca", k = 3``'abbcbccabccacaabcaababbcabbcbcca'

样例3:

输入:
输出:s = "cba", k = 1``'abcabc'

  1. StringBuilder的使用:你已经使用了 StringBuilder 来构建新的字符串,这是正确的做法,因为它比直接使用字符串拼接效率更高。
  2. 循环逻辑:你的循环逻辑是正确的,每次迭代都会根据当前字符串生成新的字符串。
  3. 边界条件:确保在 k 为 0 的情况下也能正确处理。虽然题目中没有明确提到 k 为 0 的情况,但这是一个好的编程习惯。
  4. 字符串比较:在 main 方法中,你使用了 equals 方法来比较字符串,这是正确的做法。

java代码如下:

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

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