小D的 abc 变换问题
问题描述
小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'
思路:
算法步骤
- 初始化:使用
StringBuilder来处理字符串的拼接操作,因为StringBuilder在处理大量字符串拼接时比String更高效。 - 循环变换:对于每次变换,遍历当前字符串中的每个字符,根据字符类型进行相应的变换,并将结果追加到新的
StringBuilder中。 - 更新字符串:将当前字符串更新为变换后的字符串,准备进行下一次变换。
- 重复:重复上述步骤
k次。`
public static String solution(String s, int k) {
// 初始化 StringBuilder
StringBuilder str = new StringBuilder(s);
// 进行 k 次变换
for (int i = 0; i < k; i++) {
StringBuilder nextStr = new StringBuilder();
// 遍历当前字符串,进行变换
for (int j = 0; j < str.length(); j++) {
char c = str.charAt(j);
// 根据字符类型进行变换
if (c == 'a') {
nextStr.append("bc");
} else if (c == 'b') {
nextStr.append("ca");
} else if (c == 'c') {
nextStr.append("ab");
}
}
// 更新当前字符串为下一次变换的输入
str = nextStr;
}
return str.toString();
}
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"));
}
}