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

Java中如何忽略字符串中的重复单词?

实现无重复单词统计(限制仅用基础字符串方法)

以下是符合要求的实现,仅使用charAt、length、substring方法,通过递归+三元运算符替代循环与if语句,完成去重后的单词计数:

public class UniqueWordCounter {

    public static int countUniqueWords(String s) {
        String trimmed = trim(s);
        return trimmed.length() == 0 ? 0 : 
            (() -> {
                int spacePos = findFirstSpace(trimmed);
                String firstWord = spacePos == -1 ? trimmed : trimmed.substring(0, spacePos);
                String remaining = spacePos == -1 ? "" : trimmed.substring(spacePos + 1);
                // 移除剩余字符串中所有当前单词,并合并连续空格
                String cleanedRemaining = collapseSpaces(removeAll(remaining, firstWord));
                return 1 + countUniqueWords(cleanedRemaining);
            })();
    }

    // 递归去除首尾空格
    private static String trim(String s) {
        return s.length() == 0 ? "" : 
            (s.charAt(0) == ' ' ? trim(s.substring(1)) : 
                (s.charAt(s.length()-1) == ' ' ? trim(s.substring(0, s.length()-1)) : s));
    }

    // 递归查找第一个空格的索引,无空格返回-1
    private static int findFirstSpace(String s) {
        return s.length() == 0 ? -1 : 
            (s.charAt(0) == ' ' ? 0 : 1 + findFirstSpace(s.substring(1)));
    }

    // 递归移除字符串中所有指定单词
    private static String removeAll(String s, String word) {
        int wordLen = word.length();
        return s.length() < wordLen ? s : 
            (s.substring(0, wordLen).equals(word) ? 
                removeAll(s.substring(wordLen), word) : 
                s.charAt(0) + removeAll(s.substring(1), word));
    }

    // 递归合并连续空格为单个空格
    private static String collapseSpaces(String s) {
        return s.length() < 2 ? s : 
            (s.charAt(0) == ' ' && s.charAt(1) == ' ' ? 
                collapseSpaces(s.substring(1)) : 
                s.charAt(0) + collapseSpaces(s.substring(1)));
    }

    // 测试示例
    public static void main(String[] args) {
        String testStr = "A long long time ago, I can still remember";
        System.out.println(countUniqueWords(testStr)); // 输出 8
    }
}

实现说明

  1. 核心逻辑:每次提取当前字符串的第一个单词,移除剩余字符串中所有该单词的实例,递归统计剩余字符串的唯一单词数并加1,直到字符串为空。
  2. 辅助方法:
    • trim:递归去除字符串首尾空格,避免空字符串干扰计数。
    • findFirstSpace:递归定位第一个空格的位置,用于分割第一个单词和剩余字符串。
    • removeAll:递归移除所有目标单词,实现去重效果。
    • collapseSpaces:递归合并连续空格,避免移除单词后出现多个连续空格导致分割错误。
  3. 替代方案:用三元运算符替代if判断,用递归替代循环,完全符合题目限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:10:32