我创建了一个带有字符串的程序,例如“computer”,并输出可以从中形成的所有字典单词。但是我无法弄清楚程序的Big-O效率是什么,因为它使用了递归和binarySearch。
此外,该程序可以提高效率吗?我还没有研究过哈希映射或其他数据结构。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class WordScramble {
static String[] dictArr;
static int index;
// print permutation / combination of the characters of the string s (in order)
public static void permWord(String s) { permWord("", s); }
private static void permWord(String prefix, String s) {
int n = s.length();
if (n != 0){
for (int i = 0; i < n; i++)
permWord(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, n));
}
index = Arrays.binarySearch(dictArr, prefix);
if (index > 0)
System.out.println(prefix);
}
public static ArrayList<String> getLines(File f) throws FileNotFoundException {
ArrayList<String> dict = new ArrayList<String>();
Scanner scan = new Scanner(f);
while (scan.hasNext()){
dict.add(scan.next());
}
scan.close();
return dict;
}
public static void main(String[] args) throws FileNotFoundException {
File f = new File("wordlist.txt");
ArrayList<String> dictionary = getLines(f);
dictArr = new String[dictionary.size()];
dictArr = dictionary.toArray(dictArr);
permWord("computer");
}
}
答案 0 :(得分:0)
更好的方法是扫描字典并检查哪些字是原始字的字谜。
您可以通过匹配原始单词中每个字母的数量来进行此检查。
复杂度O(k)其中k是字典中所有单词中的字母总数。
此链接显示了解决此类问题的更多方法。 Best algorithm to find anagram of word from dictonary