要解决这个问题,我们需要根据给定的解码规则对输入字符串进行逐字符替换。以下是详细的步骤和实现方法:
解码规则回顾
-
字符替换规则:
'x'解码为'y''y'解码为'x''a'解码为'b''b'解码为'a'- 其他字符保持不变。
-
示例分析:
- 样例1:
- 输入:
N=5, S="xaytq" - 解码过程:
'x'→'y''a'→'b''y'→'x''t'保持不变'q'保持不变
- 输出:
"ybxtq"
- 输入:
- 样例2:
- 输入:
N=6, S="abcxyz" - 解码过程:
'a'→'b''b'→'a''c'保持不变'x'→'y''y'→'x''z'保持不变
- 输出:
"bacyxz"
- 输入:
- 样例3:
- 输入:
N=3, S="zzz" - 解码过程:
'z'保持不变'z'保持不变'z'保持不变
- 输出:
"zzz"
- 输入:
- 样例1:
实现思路
- 遍历字符串:逐个字符检查并应用解码规则。
- 使用辅助映射:为了简化替换逻辑,可以使用一个辅助的字符数组来存储解码后的字符。
- 构建结果字符串:将辅助数组中的字符拼接成最终的解码字符串。
Java 实现
以下是完整的 Java 实现代码:
public class Main {
public static String solution(int N, String S) {
// 使用 StringBuilder 进行字符串拼接
StringBuilder decoded = new StringBuilder();
for (int i = 0; i < N; i++) {
char c = S.charAt(i);
switch (c) {
case 'x':
decoded.append('y');
break;
case 'y':
decoded.append('x');
break;
case 'a':
decoded.append('b');
break;
case 'b':
decoded.append('a');
break;
default:
decoded.append(c);
break;
}
}
return decoded.toString();
}
public static void main(String[] args) {
// 测试样例1
System.out.println(solution(5, "xaytq").equals("ybxtq")); // 输出: true
// 测试样例2
System.out.println(solution(6, "abcxyz").equals("bacyxz")); // 输出: true
// 测试样例3
System.out.println(solution(3, "zzz").equals("zzz")); // 输出: true
}
}
代码解释
-
StringBuilder:
- 使用
StringBuilder可以高效地进行字符串拼接操作,尤其是在处理较长的字符串时。
- 使用
-
循环遍历:
- 使用
for循环遍历字符串的每个字符。 - 对于每个字符,根据解码规则进行替换:
- 如果是
'x',则替换为'y' - 如果是
'y',则替换为'x' - 如果是
'a',则替换为'b' - 如果是
'b',则替换为'a' - 其他字符保持不变。
- 如果是
- 使用
-
测试样例:
- 在
main方法中,我们使用System.out.println来验证每个测试样例的输出是否与预期结果一致。
- 在
运行结果
运行上述代码,输出如下:
true
true
true
这表明所有测试样例都通过了验证。