Tester si un mot est un anagramme de manière récursive
Bonjour,
je suis étudiant et débutant en java, je cherche à écrire une fonction qui prend en paramètre 2 chaînes de caractères et teste si les mots sont des anagrammes ou non de manière récursive. Je dois utiliser une booléenne : public static boolean isAnagramRec(String s1, String s2)
Pour effectuer cette fonction, je compte procéder de la manière suivante :
dans le Main, j'initialise : static bolean check = false;
1) mettre les 2 chaînes de caractères en minuscule
2)tester si les 2 chaînes ont la même longueur
3) si c'est le cas, si la longueur des 2 chaînes est de 1, on regarde si les 2 caractères sont identiques, si c'est le cas, on donne à check la valeur true
4) si la longueur des chaînes est différente de 1, on trie les 2 chaînes de caractères par ordre croissant (cad dans l'ordre alphabétique : "bac"-> "abc"), pour k allant de 0 à [longueur de la chaîne de caractère], on teste si le premier élément de la première chaîne est égal à celui de la deuxième chaîne, si c'est le cas, on remplace le premier élément des 2 chaînes par "", cad, on supprime le premier élément de la chaîne, après cela, on appelle la fonction isAnagramRec(s1, s2)
J'ai codé un programme(ci-dessous), cependant je n'arrive pas à trier les chaînes de caractères s1, et s2, j'ai l'impression que ce n'est pas possible car String est un Object, mais comment faire alors?
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
| package tp_note_2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
Scanner scanner = new Scanner(System.in);
static boolean check = false;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Quel est le premier mot que vous souhaitez prendre en paramètre?");
String s1 = scanner.nextLine();
System.out.println("Quel est le deuxième mot que vous souhaitez prendre en paramètre?");
String s2 = scanner.nextLine();
System.out.println(isAnagramRec(s1, s2));
}
public static boolean isAnagramRec(String s1, String s2) {
s1 = s1.toLowerCase();
s2 = s2.toLowerCase();
if (s1.length() == s2.length()) {
if (s1.length() == 1) {
if ((s1).compareTo(s2) == 0) {
check= true;
}
} else {
//On trie par ordre croissant s1 et s2
char[] lettres1 = s1.toCharArray();
Arrays.sort(lettres1);
s1="";
for(int k = 0; k < s1.length(); k ++) {
s1+=String.valueOf(lettres1[k]);
}
char[] lettres2 = s2.toCharArray();
Arrays.sort(lettres2);
s2="";
for(int k = 0; k < s2.length(); k ++) {
s2+=String.valueOf(lettres2[k]);
}
if (s1.charAt(0) == (s2.charAt(0))) {
s1 = s1.replace(String.valueOf(s1.charAt(0)), "");
s2 = s2.replace(String.valueOf(s2.charAt(0)), "");
isAnagramRec(s1, s2);
}
}
}
return check;
} |
Pourriez-vous m'aider s'il vous plaît? En vous remerciant d'avance.