问题描述
小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'
- StringBuilder的使用:你已经使用了
StringBuilder来构建新的字符串,这是正确的做法,因为它比直接使用字符串拼接效率更高。 - 循环逻辑:你的循环逻辑是正确的,每次迭代都会根据当前字符串生成新的字符串。
- 边界条件:确保在
k为 0 的情况下也能正确处理。虽然题目中没有明确提到k为 0 的情况,但这是一个好的编程习惯。 - 字符串比较:在
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'
}
}