Encontrando Sub-Strings de String Contendo todas as palavras em array

Eu tenho uma String e uma matriz de palavras e eu tenho que escrever código para encontrar todas as substrings da string que contêm todas as palavras na matriz em qualquer ordem. A string não contém caracteres / dígitos especiais e cada palavra é separada por um espaço.

Por exemplo:

String dada:

aaaa aaaa aaaa aaaa cccc bbbb bbbb bbbb bbbb aaaa bbbb cccc

Palavras na matriz:

aaaa
bbbb
cccc

Amostra de saída:

aaaa aaaa aaaa aaaa cccc bbbb bbbb bbbb bbbb    

aaaa aaaa aaaa aaaa cccc bbbb    

aaaa cccc bbbb bbbb bbbb bbbb    

cccc bbbb bbbb bbbb bbbb aaaa  

aaaa cccc bbbb

Eu implementei isso usando loops for, mas isso é muito ineficiente.

Como posso fazer isso de maneira mais eficiente?

Meu código:

    for(int i=0;i<str_arr.length;i++)
    {
        if( (str_arr.length - i) >= words.length)
        {
            String res = check(i);
            if(!res.equals(""))
            {
                System.out.println(res);
                System.out.println("");
            }
            reset_all();
        }
        else
        {
            break;
        }
    }

public static String check(int i)
{
    String res = "";
    num_words = 0;

    for(int j=i;j<str_arr.length;j++)
    {
        if(has_word(str_arr[j]))
        {
            t.put(str_arr[j].toLowerCase(), 1);
            h.put(str_arr[j].toLowerCase(), 1);

            res = res + str_arr[j]; //+ " ";

            if(all_complete())
            {
                return res;
            }

            res = res + " ";
        }
        else
        {
            res = res + str_arr[j] + " ";
        }

    }
    res = "";
    return res;
}

questionAnswers(2)

yourAnswerToTheQuestion