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

如何基于基础方法实现字符串不重复单词数量统计?

用基础Java语法实现单词去重统计

现有代码仅能统计字符串中的总单词数量,无法排除重复单词。比如输入"A long long time ago, I can still remember"时,原代码返回9,但我们需要返回8(去掉重复的"long")。要求只能用基础语法(不能用哈希集合、哈希表等高级工具)实现去重统计。

原方法名mostCommonLetter和功能不符,修改后的方法名改为countUniqueWords更准确,核心思路是手动记录已出现的单词,每次识别出完整单词后,先检查是否已被统计过,仅未出现的单词计入总数。

修改后代码

public static int countUniqueWords(String s) {
    // 存储已出现的单词,按字符串长度估算数组大小(每个单词至少1字符,取长度一半足够容纳所有唯一单词)
    String[] seenWords = new String[s.length() / 2];
    int uniqueCount = 0;
    boolean inWord = false;
    int wordStartIndex = 0;

    for (int i = 0; i <= s.length(); i++) {
        // 处理到字符串末尾,或遇到非字母字符时,提取当前单词
        if (i == s.length() || !Character.isLetter(s.charAt(i))) {
            if (inWord) {
                // 提取单词并转小写,避免大小写差异导致的误判(比如"A"和"a"算同一个单词)
                String currentWord = s.substring(wordStartIndex, i).toLowerCase();
                // 检查当前单词是否已在存储数组中
                boolean isDuplicate = false;
                for (int j = 0; j < uniqueCount; j++) {
                    if (seenWords[j].equals(currentWord)) {
                        isDuplicate = true;
                        break;
                    }
                }
                // 非重复单词则计数并存入数组
                if (!isDuplicate) {
                    seenWords[uniqueCount] = currentWord;
                    uniqueCount++;
                }
                inWord = false;
            }
        } else {
            // 标记进入单词状态,记录单词起始索引
            if (!inWord) {
                inWord = true;
                wordStartIndex = i;
            }
        }
    }
    return uniqueCount;
}

关键逻辑说明

  • 单词提取:通过判断字母/非字母的边界分割单词,同时统一转小写,避免大小写不同被误判为不同单词
  • 重复检查:用字符串数组存储已统计的单词,每次新单词生成后,遍历数组逐一比对,确认无重复才计数
  • 数组容量:根据原字符串长度估算数组大小,基础语法下固定长度数组足以应对大部分场景

测试示例:调用countUniqueWords("A long long time ago, I can still remember"),返回结果为8,符合预期。

内容的提问来源于stack exchange,提问作者gaming With HENEy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:05:38