Passe à l'ordre 2 et regarde quels bigrammes (séquences de deux lettres consécutives) sont les plus fréquents et compare avec ta langue cible (le français ici) pour trancher entre le I et le H.
Je ne sais pas dans quel langage tu vas l'écrire, alors voici un pseudo-code hybride Python/C++
fonction analyse_frequentielle(texte : str, ordre_max=-1):
map<int, map<char, int>> M # ou un vecteur de map c'est toi qui vois
if(texte vide):
return M
len_texte = len(texte)
if ordre_max==-1 or ordre_max>len_texte:
ordre_max = len_texte
for(i=1; i<ordre_max; ++i):
m = map<char, int>();
for(j=0; j<len_texte-i; ++j)
s = texte[j:j+i]
if( s pas dans m):
m[s] = 0
m[s] += 1 # on compte les occurences de s
M[i] = m
return M
etaoinshrdlu = ... # map de reference correspondant à ta langue (le français)
fonction decrypter(texte_crypte):
M = analyse_frequentielle(texte_crypte, 2) # tu peux aussi ecrire un code qui trouve automatiquement le 2
# argmax(M[1]) est la lettre la plus fréquente
# argmax(M[2]) est le bigramme le plus fréquent
# etc
# ... ton code ici