题目描述如下:
小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'
解题思路
-
理解变换规则:
'a'变成'bc''b'变成'ca''c'变成'ab'
-
逐步变换:
- 每次变换都会将当前字符串中的每个字符根据上述规则进行替换。
- 重复这个过程
k次。
-
数据结构选择:
- 使用
StringBuilder来高效地构建和修改字符串。
- 使用
-
算法步骤:
- 初始化一个
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;返回最终变换后的字符串。