Maison > interface Web > js tutoriel > le corps du texte

Le plus grand diviseur commun de chaînes en Javascript

Linda Hamilton
Libérer: 2024-11-21 07:11:10
original
597 Les gens l'ont consulté

Greatest Common Divisor of Strings in Javascript
Aujourd'hui, j'ai résolu le deuxième problème de la série LeetCode 75. J'aimerais partager comment j'ai abordé ce problème.

Énoncé du problème :
Vous recevez deux chaînes, str1 et str2. Renvoie la plus grande chaîne x telle que x divise à la fois str1 et str2.

Exemples :

Entrée : str1 = "ABCABC", str2 = "ABC"
Sortie : "ABC"

Entrée : str1 = "ABABAB", str2 = "ABAB"
Sortie : "AB"

Entrée : str1 = "LEET", str2 = "CODE"
Sortie : ""
**
Mon approche**

J'ai divisé ma solution en trois parties :

Vérifiez si une chaîne de diviseur commune existe :
Tout d'abord, je vérifie si un diviseur commun existe en concaténant str1 str2 et str2 str1.

Si les deux chaînes concaténées ne sont pas égales, cela signifie qu'il n'y a pas de diviseur commun, et la fonction renvoie une chaîne vide ("").

Trouver la longueur du GCD :
Ensuite, je trouve le PGCD des longueurs de str1 et str2.

J'utilise une fonction récursive gcd(). Si b !== 0, la fonction s'appelle récursivement avec deux arguments :
pgcd(a, b) = pgcd(b, a % b)
Une fois b = 0, la fonction renvoie a, qui est la longueur du GCD.

Exemple de calcul :

Appel initial : gcd(6, 3)
Puisque b = 3 n'est pas 0, il appelle récursivement gcd(3, 6 % 3) → gcd(3, 0)

Deuxième appel : gcd(3, 0)
Maintenant b = 0, donc la fonction renvoie 3.

Extraire la sous-chaîne GCD :
Enfin, j'extrais la sous-chaîne de str1 en utilisant la longueur gcd.

function gcdOfStrings(str1, str2) {
  // recursive function to calculate the GCD of two numbers
  function gcd(a, b) {
    console.log(a, b);
    return b === 0 ? a : gcd(b, a % b);
  }

  // Step 1: Check if str1 and str2 match or not
  if (str1 + str2 !== str2 + str1) {
    return ""; // No common pattern exists
  }

  // Step 2: Find the GCD of the lengths of str1 and str2
  const len1 = str1.length;
  const len2 = str2.length;
  const gcdLength = gcd(len1, len2);

  // Step 3: The largest divisor substring
  return str1.substring(0, gcdLength);
}

// Example usage:
console.log(gcdOfStrings("ABCABC", "ABC")); // Output: "ABC"
console.log(gcdOfStrings("ABABAB", "ABAB")); // Output: "AB"
console.log(gcdOfStrings("LEET", "CODE")); // Output: ""

Copier après la connexion

Si vous avez de meilleures solutions ou idées, n'hésitez pas à les partager avec moi.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal