Trouver le mot le plus long du dictionnaire en fonction des lettres proposées C#

la programmation


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é :

C#
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.

コメント

タイトルとURLをコピーしました