[ad_1]
Bonjour à tous, s’il vous plaît et j’ai besoin de votre aide.
J’ai trois zones de texte sur le formulaire Windows :
– Dans tetxBox1.Text il y a un dictionnaire avec de nombreux mots (les mots les plus longs
avoir 12 lettres)
– Il y a toujours 12 lettres proposées dans textBox2.Text
– Dans textBox3.Text, je veux que le résultat soit le mot le plus long de textBox1
composé de lettres proposées par textBox2
Par exemple:
Dans textBox1.Text, j’ai les mots suivants :
characters character charity act acter acted successfully wind succession windy successful window windows success excellent excel excellence excellency
Dans textBox2.Text, les 12 lettres suivantes sont proposées :
euclsfcysuls
Dans textBox3.Text, je veux comme résultat le mot le plus long de textBox1.Text que les lettres de textBox2.Text :
avec succès
Je demande votre aide si c’est possible, une solution…
J’espère que vous m’avez compris, je m’excuse pour mon anglais si vous n’avez pas compris.
Merci d’avance à tous.
https://i.postimg.cc/HnS59c2R/Capture.png[^]
Ce que j’ai essayé :
static bool isSubSequence(String str1, String str2) { int m = str1.Length, n = str2.Length; int j = 0; for (int i = 0; i < n && j < m; i++) { if (str1[j] == str2[i]) { j++; } } return (j == m); } static String findLongestString(List<String> dict, String str) { String result = ""; int length = 0; foreach (String word in dict) { if (length < word.Length && isSubSequence(word, str)) { result = word; length = word.Length; } } return result; } private void btnfind_Click(object sender, EventArgs e) { String[] arr = textBox1.Lines; List<String> dict = new List<String>(arr); String str = textBox2.Text; textBox3.Text = (findLongestString(dict, str)); }
Solution 1
Pensez à la tâche plutôt qu’à la solution : vous devez trouver l’ensemble le plus long de mots correspondants ayant des lettres en commun. Commencez donc par faire deux choses : créez une carte de caractères (il n’y a que 26 possibilités de “A” à “Z” inclus) et comptez-les à la fois pour vos “lettres de contrôle” et pour vos mots individuels.
Ainsi, votre exemple “euclsfcysuls” correspond à :
A 0 B 0 C 2 D 0 E 1 F 1 G 0 H 0 I 0 J 0 K 0 L 2 M 0 N 0 O 0 P 0 Q 0 R 0 S 3 T 0 U 2 V 0 W 0 X 0 Y 1 Z 0
C’est trivial : un seul passage dans un mot en comptant les lettres. Écrivez une méthode pour ce faire et testez-la minutieusement.
Maintenant, c’est un problème plus simple : pour chaque mot à vérifier, trouvez combien de lettres correspondent en comparant le nombre de lettres : si le “mot possible” a un nombre de lettres supérieur à la même lettre du “mot de vérification”, ce n’est pas une correspondance.
Au fur et à mesure, conservez un mot « le plus long jusqu’à présent », et lorsque vous trouvez une correspondance possible, comparez-la au mot « le plus long jusqu’à présent » et mettez à jour si nécessaire.
A la fin, vous avez le match le plus long possible.
[ad_2]
コメント