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
相关产品推荐
相关产品推荐

