Java 递归回溯以创建给定字符串的排列

Java 递归回溯以创建给定字符串的排列,java,recursion,data-structures,avl-tree,recursive-backtracking,Java,Recursion,Data Structures,Avl Tree,Recursive Backtracking,我目前正在做一个编程任务,用户输入一个单词 i、 e.“那” 并且程序应该返回从给定字符串生成的所有有效单词 i、 [那个,帽子,在] 我遇到的问题是,生成的单词应该使用递归方法创建,该方法检查前缀是否有效 i、 e.如果给定的单词是“kevin”,一旦程序尝试组合“kv”,它应该知道没有单词以kv开头,并尝试下一个组合以节省时间 目前,我的代码只是创建所有排列,当输入大于8个字母时,这需要相对较长的时间 protected static String wordCreator(String pr

我目前正在做一个编程任务,用户输入一个单词

i、 e.“那”

并且程序应该返回从给定字符串生成的所有有效单词

i、 [那个,帽子,在]

我遇到的问题是,生成的单词应该使用递归方法创建,该方法检查前缀是否有效

i、 e.如果给定的单词是“kevin”,一旦程序尝试组合“kv”,它应该知道没有单词以kv开头,并尝试下一个组合以节省时间

目前,我的代码只是创建所有排列,当输入大于8个字母时,这需要相对较长的时间

protected static String wordCreator(String prefix, String letters) {
    int length = letters.length();

        //if each character has been used, return the current permutation of the letters
        if (length == 0) {
            return prefix;
        }
        //else recursively call on itself to permute possible combinations by incrementing the letters
        else {
            for (int i = 0; i < length; i++) {
                words.add(wordCreator(prefix + letters.charAt(i), letters.substring(0, i) + letters.substring(i+1, length)));
            }
        }
        return prefix;
    }
受保护的静态字符串wordCreator(字符串前缀、字符串字母){
int length=字母.length();
//如果已使用每个字符,则返回字母的当前排列
如果(长度==0){
返回前缀;
}
//else递归地调用自身,通过递增字母来排列可能的组合
否则{
for(int i=0;i

如果有人能帮我解决这个问题,我将不胜感激。我还使用AVL树来存储字典中的单词,以便在需要时进行验证。

根据您给出的信息,没有理由计算排列(如果需要,请查看维基百科中该术语的定义)。当然,除非你的例子不正确……我不确定我是否正确理解了你的问题。只是澄清一下,您是否希望生成任何长度的所有可能单词,这些单词可以使用给定单词中具有给定多重性的字符生成???@AshuPachauri是的,我希望使用用户提供的字符串生成任何长度的所有可能单词。我不太清楚你所说的“给定多重性”是什么意思,程序怎么知道如果“kv”失败,那么“kvn”也会失败?你的字典是某种词典吗?