j'ai un problème que je n'arrive pas a le résoudre
j'ai une liste A={a,b,c}
et j'ai fait la combinaison entre les élements de la lsite A alors j'aurais une liste F{ab,ac,ba,bc,ca,cb} et j'ai supprimer les doublons alors j'aurais {ab,ac,bc} voila la partie qui fait ça
ArrayList F= new ArrayList ();
for (int i=0;i<A.size();i++){
for (int j = i + 1; j < A.size(); j++) {
String Q1=A.get(i).toString();
String Q2=A.get(j).toString();
if ( ! Q1.equals(Q2) ){
String Q3=Q1.concat(Q2);
F.add(Q3);
}
}
}
mais le vrai problème que quand j'ai par exemple {ab,ac,bc,bd,cd}alors je ne sais pas faire la combinaison pour avoir {abc,acb,bcd,bdc} et apres supprimer les doublons alors j'airais une liste F qui contient seulment {abc,bcd}
Une idée: Fais le tri des tes chaines dans un ordre croissant de telle sorte que abc, cba, bac se réduisent tous àprès tri à abc, abc, abc d'où tu as seulement après suppression abc
__________________________________________________________
A.B. : La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
Je ne pense pas que ce que je viens de dire est assez compliqué.
supposons que tu as le chaines {ab, bc, ba}
si tu tries chaque chaine par odre croissant (a < b < ... < z)
tu obtient : {ab, bc, ab}
Puis si tu fais le tri de toutes l'ensemble tu obtiens: {ab, ab, bc}
Enfin tu fais l'unification ce que donne {ab, bc}
C'est comme en fait avec UNIX: sort | uniq
__________________________________________________________
A.B. : La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
je n'ai pas compris désolé et merci
si j'ai une liste F {ab,ac,bc} alors j'aurais {abc,acb,bcd,bdc}
meme si j'ai une liste avec {abd,acd,abc} apres la combinaison j'aurais {abdc}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Mais si tu veux générer toutes les combinaisons possibles tu peux utiliser un arbre de choix.
__________________________________________________________
A.B. : La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
essaie me comprendre mon exemple est clair
{ab,ac,bc,} je voulais avoir comme résultat {abc,acb,bcd,bdc} et pas {abac,abbc,acbc} mais {abc,abc,acb}puis {abc} car je considére les autre doublons
et si j'ai une liste {ab,bc} je ne peux pas faire la combinaison car il faut qu'on trouve a au premier de ab et a en premier bc c'est pour ça je ne peux faire combinaison
meme si j'ai uen lsite avec {abc,abd} j'aurais {abcd} et pas {abcabd}
et si j'ai une lsite {abc,adc} je ne peux pas faire car j'ai ab n'égale pas ad
je m'avance et je pense que j'ai trouvé la solution mais je coince sur une condition que j'ignore de l'ajouter dans le code par exemple si j'ai une liste {ABC,ABD.BCE,ABF}
essayez me comprendre
car le code que je vais poster seulment une idée générale
j'ai mis comme code
for i = 1 jusqu'à 3 faire
X=T1[i]
for j= i+1 jusqu'à3 faire
Y=T1[j]
je vais séparer Y alors j'aurais une liste T2={A,B,D}
je vais parcourir la liste
while (i<=Té.size()){
if (T2[K] appartient à X)
remove
K++;
sinon K=T2.size();
}
concacténation x avec T2 ( le reste de la liste T2 )
j'ai appliqué ça qu'avec i=1;alors j=2 T1[1]=ABC et T2[2]=ABD
le problème que je n'arrive pas a ajouter la condition si je serais à j=3 T2[3]=BCE
on voit B n'appartient pas à X alors je sote à j égale 4 ainsi de suite jusqu'à la fin de la liste T2
j'espere que vous m'avez bien comprendre mes amis
merci encore de bien vouloir m'aider
public static void main(String[] args) {
ArrayList A = new ArrayList();
A.add("a");
A.add("x");
A.add("c");
A.add("h");
A.add("d");
A.add("v");
ArrayList B = new ArrayList();
B.add("ah");
B.add("ac");
B.add("ad");
ArrayList SS = new ArrayList();
ArrayList c = new ArrayList();
ArrayList T = new ArrayList();
for (int i = 0; i < B.size(); i++) {
String Q2 = B.get(i).toString();
for (int j= i+1; j < B.size(); j++) {
String Q1 = B.get(j).toString();
char[] chars = Q1.toCharArray();
StringBuffer buf = new StringBuffer();
int m = chars.length;
for (int E = 0; E < m; E++) {
buf.append(chars[E]); for (int W 0, n buf.length(); W < n; W++) {
if (A.contains(buf.substring(W, buf.length()))) {
c.add(buf.substring(W, buf.length()));
buf = new StringBuffer();
W = n;
}
}
}
}
ArrayList AToDelete = new ArrayList();
int u = 0;
int index;
Iterator ii = c.iterator();
while (ii.hasNext()) {
String x = ii.next().toString();
index = Q2.lastIndexOf(x); //on recherche le dernier index où l'on trouve la chaine 1;
if (index != -1) { // on a trouvé
AToDelete.add(c.get(u));
}
u++;
}
c.removeAll(AToDelete);
Iterator f = c.iterator();
while (f.hasNext()) {
String x = f.next().toString();
String o = Q2.concat(x);
SS.add(o);
}
}
System.out.println(SS);
}
le résultat de la liste SS{[ahc, ahd, acd, acd]} mais normalemnt j'aurais [ahc, ahd, acd]