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

基于LinkedHashMap重构原字符串的实现求助

完善convertToOldString方法实现

你的思路方向是对的,但现有代码存在两个关键问题:一是字符数组的长度计算错误(lettersHistogram.size()是不同字符的数量,而非原字符串的长度);二是缺少将字符填充到对应位置的核心逻辑。以下是完整实现:

完整代码

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class StringManagement {  
    private String str;
    private Map<Character, List<Integer>> lettersHistogram = new LinkedHashMap<>();

    public void convertToOldString(){
        // 处理空映射的边界情况
        if (lettersHistogram.isEmpty()) {
            System.out.println("");
            return;
        }

        // 第一步:计算原字符串的实际长度(最大位置索引 + 1)
        int maxIndex = 0;
        for (List<Integer> positions : lettersHistogram.values()) {
            for (int pos : positions) {
                if (pos > maxIndex) {
                    maxIndex = pos;
                }
            }
        }
        char[] resultChars = new char[maxIndex + 1];
        // 填充初始空格
        Arrays.fill(resultChars, ' ');

        // 第二步:遍历映射,将字符填充到对应位置
        for (Map.Entry<Character, List<Integer>> entry : lettersHistogram.entrySet()) {
            char currentChar = entry.getKey();
            List<Integer> positions = entry.getValue();
            for (int pos : positions) {
                // 确保位置不越界(可选,根据业务场景决定是否保留)
                if (pos >= 0 && pos < resultChars.length) {
                    resultChars[pos] = currentChar;
                }
            }
        }

        // 第三步:转为字符串并打印
        String oldString = new String(resultChars);
        System.out.println(oldString);
    }
}

关键逻辑说明

  • 数组长度计算:遍历所有字符的位置列表,找到最大的索引值,加1得到原字符串的实际长度(因为索引从0开始),比如示例中最大索引是11,所以数组长度为12,对应原字符串“HELLO SAMOS!”的长度。
  • 字符填充:遍历映射中的每个字符及其位置列表,将字符逐个放到数组对应的索引位置上。
  • 边界处理:增加了空映射的判断,避免出现空指针或异常;同时可选增加位置越界检查,防止非法位置破坏数组结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:55:46