簡體   English   中英

如何找到所有可能的字謎?

[英]How to Find All Possible Anagrams?

所以我想做一個字謎解碼器,我想知道是否有更好的方法來做到這一點。 我目前的代碼是這樣的:

Random random = new Random();
char[] splitAnagram = chosenAnagram.toCharArray();
int[] presetNumbers = new int[chosenAnagram.length()];
int i = 0;
while (true) {
    TimeUnit.MILLISECONDS.sleep(10);
    int thisRandom = random.nextInt(chosenAnagram.length());
    if (Arrays.asList(presetNumbers).contains(thisRandom) == true)
        presetNumbers[i] = thisRandom;
    else
        continue;
    i++;
    if (i > chosenAnagram.length())
        break;
}
for (int l = 0; l < chosenAnagram.length(); l++) {
    System.out.println(splitAnagram[presetNumbers[l]]);
}

基本上,它為每個字母生成隨機數,以便“打亂”單詞。 它是有缺陷的,因為它甚至不應該循環,只需進行一次爭奪,但總的來說它看起來非常緩慢且容易出錯(我睡了 10 毫秒,因為它只能在每次系統時間更改時生成隨機數)。

我想知道是否有其他一些算法,或者我可以使用的可能的 API。 謝謝!

PS 我正在運行 Eclipse Photon,以防萬一你知道一個插件。

我從這篇Stackoverflow 帖子中找到了一種使用Fisher--Yates Shuffle來做到這一點的方法。 這是代碼的結果:

@SuppressWarnings("unchecked")
private void beginDecoding(String chosenAnagram) throws InterruptedException {
    Random random = new Random();
    List madeAnagrams = new ArrayList();
    int factorial = 1;
    for (int i = chosenAnagram.length(); i > 0; i--) {
        factorial = i * factorial;
    }
    System.out.println(factorial);
    while (true) {
        if (madeAnagrams.size() == factorial) {
            break;
        }
        TimeUnit.MILLISECONDS.sleep(10);
        char[] splitAnagram = chosenAnagram.toCharArray();
        for (int i = chosenAnagram.length() - 1; i > 0; i--) {
            int index = random.nextInt(i + 1);
            char letter = splitAnagram[index];
            splitAnagram[index] = splitAnagram[i];
            splitAnagram[i] = letter;
        }
        String returnAnagram = new String(splitAnagram);
        if (!madeAnagrams.contains(returnAnagram)) {
            madeAnagrams.add(returnAnagram);
            System.out.println(returnAnagram);
        }
        else
            continue;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM