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

求解:基于变位词生成所有可能句子的计数逻辑优化

变位词替换生成不同句子的计数解决方案

问题核心错误分析

你当前代码的问题在于用加法统计选项数,这只能计算替换单个单词的情况,完全忽略了多个单词同时替换的组合可能性。正确逻辑应该用乘法原理——每个单词的替换选择是独立的,所有选择的乘积就是总共有多少种不同句子。

修正后的逻辑步骤

  1. 初始化结果为1(代表原句子本身这一种基础情况)
  2. 遍历句子中的每个单词:
    • 将单词字符排序生成键,去变位词映射中查找对应的变位词列表长度
    • 如果单词不在映射中,默认只有自身1种选择
    • 将当前结果乘以该变位词组的大小
  3. 最终结果即为所有可生成的不同句子数量

修正后的Java代码

import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.List;

static long getPossibleCount(String sentence, Map<String, List<String>> map) {
    long total = 1;
    String[] words = sentence.split(" ");
    for (String word : words) {
        char[] chars = word.toCharArray();
        Arrays.sort(chars);
        String key = new String(chars);
        // 获取变位词组大小,默认1(单词无变位词时仅自身可选)
        int groupSize = map.getOrDefault(key, Collections.singletonList(word)).size();
        total *= groupSize;
    }
    return total;
}

关键说明

  • 使用long类型存储结果:句子最多20个单词,若每个单词有大量变位词,int会溢出,long能避免这个问题
  • 初始值设为1:每个单词至少有自身这一种选择,所有位置选自身就是原句子,对应1种情况
  • 乘法逻辑的合理性:比如句子中有两个单词,分别有3种和2种变位词选择,总组合数是3×2=6种,覆盖了所有单替换、双替换和原句子的情况

示例验证

假设单词列表为["abc", "bca", "cab", "def", "fed"],句子为"abc def":

  • 正确结果:3×2=6种
  • 原代码输出:3+2=5种(明显错误,遗漏了同时替换两个单词的情况)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:05:17