You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用临时数据结构修改Queue队列中摩尔斯电码元素的方法

解决方案

核心思路

Queue接口本身支持poll()(取出队首元素)和offer()(向队尾添加元素)两个基础操作,我们只需要对队列内的每个元素完成「取出-判断替换-放回队尾」的操作即可,全程不需要额外的临时数据结构,处理完成后元素的原有顺序完全不变。
具体逻辑:

  • 先获取队列的初始长度,作为固定的循环次数,确保每个元素仅被处理一次
  • 每次循环取出队首元素,匹配到目标摩尔斯码..--..就替换为.-.-.-,否则保留原内容
  • 将处理后的元素重新塞回队列尾部
  • 循环结束后原队列即为处理完成的结果

实现代码

public static void replaceMorseQuestionMark(Queue<String> morseQueue) {
    int queueSize = morseQueue.size();
    for (int i = 0; i < queueSize; i++) {
        String current = morseQueue.poll();
        // 匹配问号的摩尔斯码则替换,否则保留原内容
        String processed = "..--..".equals(current) ? ".-.-.-" : current;
        morseQueue.offer(processed);
    }
}

测试示例

你可以用如下代码验证功能:

public static void main(String[] args) {
    Queue<String> testQueue = new LinkedList<>();
    // 构造测试数据:包含普通编码、问号编码、多段重复的问号编码
    testQueue.offer("....");
    testQueue.offer(".");
    testQueue.offer("..--.."); // 问号
    testQueue.offer(".-..");
    testQueue.offer("..--.."); // 问号
    testQueue.offer(".--");

    replaceMorseQuestionMark(testQueue);
    // 输出验证结果
    while (!testQueue.isEmpty()) {
        System.out.println(testQueue.poll());
    }
}

预期输出中原来的..--..都会被替换为.-.-.-,其余编码和原有顺序保持不变。

注意事项

  • 循环次数必须使用队列的初始长度,不要在循环条件中直接调用morseQueue.size():虽然本次操作中每次出队、入队各一次,队列长度始终不变,但预先保存初始长度的写法兼容性更高,避免后续修改逻辑时出现死循环
  • 字符串匹配必须用equals()方法,不要用==比较,避免字符串常量池以外的场景匹配失败
  • 本实现完全基于Queue接口的标准方法,不需要调用LinkedList特有的迭代器、索引访问等接口,符合题目要求

内容的提问来源于stack exchange,提问作者gumbojoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:45:01