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

基于Trie树的多字符抽取式英文缩写生成器开发求助

问题分析与解决方案:非连续字符抽取的英文缩写生成器

问题核心

你的现有实现只能匹配输入文本中的连续子串作为缩写,无法抽取非连续的字符组合(比如示例中的cheer)。根本原因在于:

  • multisearch仅遍历输入的每个起始位置,检查从该位置开始的连续后缀
  • search函数按顺序连续匹配Trie节点,不允许跳过字符,完全未处理非连续匹配的场景

解决方案:DFS+Trie实现非连续字符匹配

要实现从输入文本中抽取非连续字符组成有效单词,需要用**深度优先搜索(DFS)**遍历输入文本的每个字符,同时在Trie中回溯匹配,允许跳过字符,记录所有可能的有效单词。

修改后的核心代码

替换原有的search和multisearch函数,新增DFS递归逻辑:

// 用Set存储结果自动去重
public static Set<String> validAcronyms = new HashSet<>();

// DFS递归搜索非连续字符匹配
static void dfs(TrieNode currentNode, String input, int pos, StringBuilder currentAcronym) {
    // 到达单词节点时记录当前缩写
    if (currentNode.isEndOfWord) {
        validAcronyms.add(currentAcronym.toString());
    }
    // 遍历到输入末尾则终止递归
    if (pos >= input.length()) {
        return;
    }

    // 选项1:跳过当前字符,继续处理下一个位置
    dfs(currentNode, input, pos + 1, currentAcronym);

    // 选项2:尝试匹配当前字符
    char c = input.charAt(pos);
    int index = c - 'a';
    if (index >= 0 && index < ALPHABET_SIZE && currentNode.children[index] != null) {
        currentAcronym.append(c);
        dfs(currentNode.children[index], input, pos + 1, currentAcronym);
        currentAcronym.deleteCharAt(currentAcronym.length() - 1); // 回溯,移除当前字符
    }
}

// 替换原multisearch的入口函数
static void findAllAcronyms(String input) {
    validAcronyms.clear();
    dfs(root, input, 0, new StringBuilder());
}

修改run函数中的调用逻辑

把原来的multisearch(input);替换为:

findAllAcronyms(input);
// 整理结果输出
TempA = String.join("\n", validAcronyms);

代码逻辑说明

  1. 递归分支选择:每个递归步骤有两种处理方式——跳过当前字符继续遍历,或匹配当前字符并进入Trie子节点
  2. 回溯机制:匹配字符后,完成递归需要删除最后添加的字符,保证后续分支的独立性
  3. 去重处理:用HashSet存储结果,避免同一个单词被不同路径重复匹配
  4. 可扩展性:可以添加长度过滤逻辑,比如在记录结果时判断currentAcronym.length()是否在2-8之间,过滤无意义的过短/过长缩写

额外优化建议

  • 字典预处理:插入Trie前过滤掉长度不符合要求的单词(比如只保留2-8个字符的单词),减小Trie体积,提升搜索效率
  • 优先级排序:给结果按单词使用频率、长度排序,优先展示更常用的缩写
  • 大写字符优先:针对原输入中的大写字符,可在DFS中优先匹配这类字符,贴合用户输入的重点标记

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:45:56