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

Java实现按字母表返回双写字母对应单词集合功能结果异常求助

问题分析与修复方案

问题根因

  • 内层循环边界错误:代码中内层for循环条件写为for (int i = 0; i <= sets.length; i++),sets数组长度为26,合法下标范围是0~25,使用<=会让i遍历到26,对应生成的双写字符串为超出a-z范围的{{,属于无效逻辑,若存在匹配该字符串的单词还会触发数组下标越界异常。
  • 返回逻辑不符合需求:需求要求返回固定长度26的数组,每个下标对应a~z的双写字母结果,即使没有对应单词也要用空集合占位。但你现有代码会过滤掉所有没有匹配单词的空Set,仅将非空Set存入返回数组,所以如果只有23个字母存在对应双写单词,返回的数组长度自然为23。

修复后代码

/**
 * 返回包含双写字母的单词集合数组,数组每个位置对应a~z的一个双写字母的匹配结果
 * @param words 输入单词集合
 * @return 长度为26的Set数组,每个下标对应a~z的双写字母匹配结果
 */
public Set<String>[] allWordSetsContainingDoubleLetters(Set<String> words)
{
    Set<String> sets[] = new HashSet[26];
    // 预先初始化所有位置为空HashSet,保证返回数组每个位置都有有效值
    for (int i = 0; i < sets.length; i++) {
        sets[i] = new HashSet<>();
    }

    for (String word : words) 
    {
         String lowerCase = word.toLowerCase();
         // 修正循环边界,仅遍历0~25
         for (int i = 0; i < sets.length; i++) 
         {
             char c = (char) ('a' + i);
             String doubleStr = String.valueOf(c) + c;
             if (lowerCase.contains(doubleStr)) 
             {
                 sets[i].add(word);
             }
         }
    }
    // 直接返回长度为26的数组即可
    return sets;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:15:02