[Java]Compteur d'anagrammes algo
Bonjour,
J'ai implementer un algorithme de compteur d'anagrammes.
Je l'ai fait avec Java mais je me rend compte que mon code n'est du tout évolutif.
Et j'ai beaucoup de code pour chaque sequences de traitement..
je voudrait savoir s'il est possible de rendre le code plus évolutif et moins conséquent ?
il y a aussi beaucoup de redondance etc..
le but de ce code est de detecter les possible anagrammes dans une chaine de caractère,
les chaines seul ne sont donc pas pris en compte vue leur unicité,
je fait les comparaison sur deux chaine et plus.. et fait le compte du nombre d'anagrammes,
Je sais que je peux améliorer mon code mais je voudrait vos conseils ;)
merci pour vos réactions.
voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
public class AnagrammesImpl {
//je remplie une liste avec chaque mot de la chaine de caractères
public List<String> anagrammesMethode(String s)
{
List<String> mList = new ArrayList<String>();
String val= "";
for (int i=0;i< s.length();i++)
{
val = val + s.charAt(i);
if (s.charAt(i) == ' ' )
{
mList.add(val);
val = "";
}
}
return mList;
}
//je supprime les mots unique dans la liste
public void suppressionElementUnique(List list)
{
for(int i=0;i<list.size();i++)
{
for (int j=i+1;j<list.size();j++)
if(list.get(i).equals(list.get(j)))
{
list.removeAll(Arrays.asList(list.get(j)));
}
}
}
//je trie les mots par ordre alphabetique et trie chaque mot charactères par charactères
public void trieListeEtMot(List<String> list,List listeTrier)
{
Collections.sort(list);
for(int i=0;i<list.size();i++)
{
char[] c = list.get(i).trim().toCharArray();
Arrays.sort(c);
String sorted = new String(c);
listeTrier.add(sorted);
}
}
//je creer un liste et ajoute les anagrammes dans la liste
public ArrayList listeAnagrammesChaineChar(List<String> list)
{
Collections.sort(list);
ArrayList listeAnagrammes = new ArrayList() ;// int i=0;
for(int i=0;i<list.size();i++)
{
for(int j=i+1;j<list.size();j++)
{
if(list.get(i).equals(list.get(j)))
{
listeAnagrammes.add(list.get(i));
}
}
}
return listeAnagrammes;
}
//je supprime les doublon dans les anagrammes et fait le compte de mot
public int suppressionDoublonAnagrammeEtCalcluNbAnagramme(List list)
{
int cpt=0;
Set set = new HashSet() ;
set.addAll(list) ;
ArrayList distinctList = new ArrayList(set);
for(int i = 0;i<distinctList.size();i++)
{
cpt++;
}
return cpt;
}
} |
Amélioration de la structure de l'implémentation..
Bonjour Songbird,
En premier lieu, merci pour ta réaction.
Je trouve tes remarques très constructive,
qui me permette d'avoir un vue d'ensemble
le but de ce code n'est pas de l'implementer dans un projet ou autre,
j'essai de me Driller a un quelconque entretien technique.
vu que les recruteurs font souvent passer des test technique sous elaboration d'un mini projet.
Mon avis:
Citation:
je pense pour pouvoir réussir avec succès
il fait vraiment avoir une logique rigoureuse
et comprendre le cas de façon global,
poser les questions avant de commencer le projet est une bonne façon de commencer,
on ne peut avoir tous compris des le départ,
il ya toujours un cas qui nous échappe ou que nous n'avons pas prévus
avant de rentrer dans le code
pour la partie codage,
ma question est de savoir si mon approche est bien élaborer,
car il faut tout de même avoir un code évolutif au final.
si vous avez d'autres remarques je suis preneur..
merci pour vos réactions.