I need to optimise a search engine. What is does is to find all possible 2 to n-letter words, by making all possible combinations like this
(for 2 letter words) w = any letter can be on 1-st letter spot + any letter left (but the 1-st) for the second spot ; checkIfIsWord(w)
(for n letter words) n1 + n2 + n3 + n4 + ... n ; checkIfIsWord(w)
That is working, but is quite time consuming. Please help me with idea how to make it faster!
Here is the code:
String w = "";
for (int i = 0; i < letters.length; i++)
{
for (int j = 0; j < letters.length; j++)
{
if (i == j) continue;
w = "" + (char) letters[i] + (char) letters[j];
checkIfIsWord(w);
for (int k = 0; k < letters.length; k++)
{
if (i == k || j == k) continue;
w = "" + (char) letters[i] + (char) letters[j] + (char) letters[k];
checkIfIsWord(w);
for (int m = 0; m < letters.length; m++)
{
if (i == m || j == m || j == m || k == m) continue;
w = "" + (char) letters[i] + (char) letters[j] + (char) letters[k] + (char) letters[m];
checkIfIsWord(w);
...
}
}
}
}
Method checkIfIsWord
void checkIfIsWord(String w)
{
if (w.length() > 2
&& words.contains(w.toLowerCase()) // (1)
&& !allWords.contains(w))
{
allWords.add(w);
runOnUiThread(updateMaxWords);
}
}