青训营X豆包MarsCode 技术训练营第七课 | 豆包MarsCode AI 刷题

39 阅读2分钟

要解决这个问题,我们需要根据给定的解码规则对输入字符串进行逐字符替换。以下是详细的步骤和实现方法:

解码规则回顾

  1. 字符替换规则

    • 'x' 解码为 'y'
    • 'y' 解码为 'x'
    • 'a' 解码为 'b'
    • 'b' 解码为 'a'
    • 其他字符保持不变。
  2. 示例分析

    • 样例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. 遍历字符串:逐个字符检查并应用解码规则。
  2. 使用辅助映射:为了简化替换逻辑,可以使用一个辅助的字符数组来存储解码后的字符。
  3. 构建结果字符串:将辅助数组中的字符拼接成最终的解码字符串。

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
    }
}

代码解释

  1. StringBuilder

    • 使用 StringBuilder 可以高效地进行字符串拼接操作,尤其是在处理较长的字符串时。
  2. 循环遍历

    • 使用 for 循环遍历字符串的每个字符。
    • 对于每个字符,根据解码规则进行替换:
      • 如果是 'x',则替换为 'y'
      • 如果是 'y',则替换为 'x'
      • 如果是 'a',则替换为 'b'
      • 如果是 'b',则替换为 'a'
      • 其他字符保持不变。
  3. 测试样例

    • main 方法中,我们使用 System.out.println 来验证每个测试样例的输出是否与预期结果一致。

运行结果

运行上述代码,输出如下:

true
true
true

这表明所有测试样例都通过了验证。