生成单词所有变体的算法

标签 algorithm combinatorics pseudocode

我想用下面的例子来解释我的问题。

假设单词:abc a 有变体:ä, à
b 没有变体。
c 有变体:ç

所以可能的词是:

美国广播公司
äbc
àbc
abç
äbç
àbç

现在我正在寻找一种算法,该算法可以打印具有任意字母变体的任意单词的所有单词变体。

最佳答案

我建议你递归地解决这个问题。下面是一些供您入门的 Java 代码:

static Map<Character, char[]> variants = new HashMap<Character, char[]>() {{
    put('a', new char[] {'ä', 'à'});
    put('b', new char[] {        });
    put('c', new char[] { 'ç'    });
}}; 

public static Set<String> variation(String str) {

    Set<String> result = new HashSet<String>();

    if (str.isEmpty()) {
        result.add("");
        return result;
    }

    char c = str.charAt(0);
    for (String tailVariant : variation(str.substring(1))) {
        result.add(c + tailVariant);
        for (char variant : variants.get(c))
            result.add(variant + tailVariant);
    }

    return result;
}

测试:

public static void main(String[] args) {
    for (String str : variation("abc"))
        System.out.println(str);
}

输出:

abc
àbç
äbc
àbc
äbç
abç

关于生成单词所有变体的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792110/

相关文章:

Python:廉价地生成一个大的统一排列

math - 将随机数生成循环变成一个方程?

algorithm - 大(O)表示法 : Can anyone verify?

c - 将二维数组呈现为树

algorithm - Strange Bank(Atcoder初学者竞赛099)

algorithm - 一种膨胀/收缩(偏移、缓冲)多边形的算法

algorithm - 将多边形分成 2 个相等的部分

c++ - 在 C++ 中创建 n 个项目的所有可能的 k 个组合

c++ - 深度优先搜索 (C++)

r - 在 R 中寻找约束满足算法