0
votes

Code le plus simple pour vérifier si une chaîne contient tout l'alphabet à l'aide de JavaScript

C'est la solution la plus simple que j'ai trouvée. Il renvoie true code> ou false code> pour la chaîne donnée si elle contient toutes les lettres de l'alphabet dedans ou non.

Voici le code que j'ai trouvé: h3>
new Set("A quick brown fox jumps over the lazy dog"
  .toLowerCase()
  .replace(/[^a-z]/gi, "")
  .split("")
).size === 26


6 commentaires

Je fournis le plus simple que j'ai découvert jusqu'à la date où est-ce le plus simple?


Cela pourrait être une question pour avis de code .


L'alphabet dans une commande spécifique? Sensible aux majuscules et minuscules?


J'ai partagé le plus simple que j'ai découvert. Peut-être une sorte de critique de code, mais attendez un autre code le plus simple. Aucun ordre spécifique, il devrait simplement contenir tout l'alphabet insensible de cas.


Pourquoi vous avez besoin tolowercase () lorsque vous utilisez i drapeau dans votre motif de regex?


Oui, pas besoin de regex. Mise à jour. Merci!


7 Réponses :


2
votes

Ceci est le code le plus simple que j'ai trouvé, il renvoie true ou false pour la chaîne donnée mentionnant la chaîne contient tout l'alphabet de celui-ci ou non.

new Set("A quick brown fox jumps over the lazy dog".toLowerCase().replace(/[^a-z]/g, "") ).size === 26


3 commentaires

S'il vous plaît ne postez pas ce code dans la réponse Utilisez Modifier pour mettre à jour votre question


Merci @chris heureux pour la confirmant.


Pas besoin de deux minuscules que vous utilisez i drapeau dans regex. Drop i drapeau ou tolowercase ()



1
votes

Je crois que c'est le "le plus simple" w.r.t. Complexité informatique, nécessitant O (1) code> espace (pour stocker la table de fréquence de caractères, en supposant une alphabet d'entrée possible fixe fixe) et O (n) code> TIME Sur la chaîne d'entrée uniquement une fois (plus un temps constant pour la vérification finale via la chaîne code> alphabet code>).

var inputString = "Jaded zombies acted quaintly but kept driving their oxen forward";

var charCounts = {};
for( var i = 0; i < inputString.length; i++ ) {
    var c = inputString.at( i ).toLower();
    if( charCounts[c] ) charCounts[c]++;
    else                charCounts[c] = 1;
}

var alphabet = "abcdefghijklmnopqrstuvwyz";
for( var a = 0; a < alphabet.length; a++ ) {
    if( !charCounts[ alphabet.at(a) ] ) {
        console.log( "char %s does not appear in input string.", alphabet.at(a) );
    }
}


1 commentaires

Merci @dai pour partager votre réponse en fonction de la complexité temporelle. Mais celui qui tente de mettre en valeur est le code le plus simple. Probablement une ligne unique, comme on m'a demandé le plus grand développeur front-end.



2
votes

Vous pouvez éviter le regex et revenir tôt à partir de la fonction une fois que vous avez toutes les lettres avec quelque chose comme ça. Cela crée une série de toutes les lettres et les supprime comme vous les trouvez. Une fois que l'ensemble est vide, vous pouvez revenir. Si la boucle finit, vous n'avez pas tout retiré. Cela nécessite uniquement de l'espace pour l'alphabet défini et puisque les opérations définies sont une durée constante, c'est O (n) dans le pire des cas.

p>

function allLetters(str){
    let alpha = new Set("abcdefghijklmnopqrstuvwxyz")
    for (let c of str.toLowerCase()){
        alpha.delete(c)
        if (alpha.size == 0) return true
    }
    return false
}

let text = "hello my name if gunther"
let text2 = "The quick brown fox jumps over the lazy dog"

console.log(allLetters(text))
console.log(allLetters(text2))


3 commentaires

nouvel ensemble ("ABCDEFGHIJKLMNOPQRSTUVWXYZ" .Split ('')) prendra également du temps


Oui, @MAHEREERALI, mais c'est une opération de temps constante afin qu'elle n'affecte pas le grand calcul.


O ... oui @Maheer Ali, probablement basé sur la complexité temporelle, ce n'est peut-être pas le meilleur, mais celui que j'ai répondu à travers la boucle pour la boucle n'a pas satisfait le plus grand UI Dev. et m'a demandé écrire une seule ligne comme celle partagée.



1
votes

Comme je le regarde à nouveau, je peux fournir une infime amélioration à votre code: xxx

Supprimer le drapeau "I '" sur le regex parce qu'il est mûr.


1 commentaires

Oui @chris heureux, nous n'avons pas besoin d'utiliser l'insensibilité à la casse dans Remplacer Regex, car nous avons déjà utilisé Tolowercase. Merci!



4
votes

Vous n'avez pas besoin de SPLIT CODE>

Comme il serait parti, vous n'avez pas besoin d'exécuter String # divisée code> avant de transmettre votre chaîne sur Nouvel ensemble code>. Le constructeur pour définir code>, lorsqu'il est passé une chaîne, le divisera essentiellement en caractères unique pour vous pour la création de l'ensemble. P>

Exemple: P>

Set(3) {"t", "e", "s"}


1 commentaires

@ rockey91 Si vous aimez ma solution, pouvez-vous la marquer comme la réponse



0
votes

Voici un moyen différent de celui-ci en utilisant string.fromcharcode () code> et chaque (code> code>

p>

const allLetters = (str) => [..."abcdefghijklmnopqrstuvwxyz"].every(x => str.toLowerCase().includes(x));

console.log(allLetters('abcdefghijklmnopqrstuvwxyz'))
console.log(allLetters('abcdefghijklmnopqyz'))


0 commentaires

0
votes
function isPangram(sentence){
   let lowerCased = sentence.toLowerCase();
   for(let char of 'abcdefghijklmnopqrstuvwxyz'){
      if(!lowerCased.includes(char)){
         return false
       }
    }
  return true
}
Here is another way using a for...of loop. 

0 commentaires