Défi de programmation de permutation (Java)


Ok, j'ai donc un défi de programmation que j'ai essayé de résoudre moi-même mais avec lequel j'ai vraiment du mal. Pour commencer, vous avez un tableau de chaînes (appelées "mots"), chacune de ces chaînes est un seul mot.

search_query = "these are all the words I start off with";        
String[] queries = search_query.split(" ");

Le défi consiste à sortir un autre tableau où chaque élément du tableau est long d'un ou plusieurs mots et le tableau contient chaque permutation des mots, mais conserve les mots dans l'ordre d'origine, en plus d'être consécutif. Par exemple, le tableau pour cela chaîne:

"one two three"

Devrait être:

{"one", "one two", "one two three", "two", "two three", "three"}

L'ordre dans lequel ces éléments se retrouvent n'est pas important, mais je vais passer par cet algorithme assez souvent, donc l'efficacité est quelque peu importante.

(Spoilers si vous voulez l'essayer entièrement vous-même...)

Voici tout mon code j'ai jusqu'à présent:

search_query = "these are all the words I start off with";        
String[] queries = search_query.split(" ");
ArrayList<String> final_list = new ArrayList<>();
String query;

for (int i = 0; i < queries.length; i++) {     //i is the start index for one segment which will become a single item
    for (int j = i; j < queries.length; j++) { //j is the end index for one segment which will become a single item
        query = "";
        for (int k = i; k < j; k++) {  
   //each item in final_list is made up from the items in queries from index i to k, 
   // where k <=j and k >=i
            query += queries[k] + " ";
            final_list.add(query);
        }
    }
}
Author: Beyarkay, 2016-07-18

1 answers

Voici une solution simple de votre problème,
vous avez un problème dans votre 3ed boucle, vous n'en avez pas besoin!

, Vous avez juste besoin de parcourir vos start(i) et end(j) des indices comme indiqué ci-dessous:

public static void main(String[] args) {
    String search_query = "one two three";
    String[] queries = search_query.split(" ");

    List<String> liste = new ArrayList<>();

    for (int i = 0; i < queries.length; i++) {
        String query  = "";
        for (int j = i; j < queries.length; j++) {
            query  += queries[j] + " ";
            liste.add(query);
        }
    }

    for (String y : liste) {
        System.out.println(y);
    }
}
 1
Author: YCF_L, 2016-07-18 17:59:50