給定一個包含元音的單詞,我試圖編寫一個方法來發現通過交換元音創建的所有可能的單詞排列。Java - 查找所有可能的單詞與元音交換
舉例來說,如果這個詞是「根」的結果集將類似於:
{"roat", "roet", "roit", "rout", "royt", "reet", "riot", "reat" ...}
我最初的策略是把這個像一個遞歸回溯問題,我已經寫了下面的方法:
public static final String VOWELS = "aeiouy";
...
vowelSwap(emptySet, listRepresentingString, 0); // the initial recursive call
private void vowelSwap(Set<String> swaps, List<Character> list, int start) {
for (int i = start; i < list.size(); i++) {
if (isVowel(list.get(i))) {
// do some vowel swapping on this character
for (int j = 0; j < VOWELS.length(); j++) {
if (list.get(i) != VOWELS.charAt(j)) {
char temp = list.get(i);
list.set(i, VOWELS.charAt(j));
String s = stringify(list);
swaps.add(s);
vowelSwap(swaps, list, i + 1);
list.set(i, temp);
}
}
}
}
public static String stringify(List<Character> list) {
...
a method that converts a List<Character> to String
}
這是有效的,但是當單詞中有大量的元音時,會遇到糟糕的運行時間。 (給定n個元音字母在單詞中,有6度n次方的變化,我相信?)
我的問題是這樣的:
我怎麼能在某種程度上,這將使我更快的結果的情況下解決這個問題有很多元音的詞彙?
編輯:6 n次方的變化,不是n^6
運行時不應該是壞的,我的意思是'N = 10',只有百萬的變化,那是一個眨眼 –