首页 > web前端 > js教程 > JavaScript 中字符串的最大公约数

JavaScript 中字符串的最大公约数

Linda Hamilton
发布: 2024-11-21 07:11:10
原创
643 人浏览过

Greatest Common Divisor of Strings in Javascript
今天解决了LeetCode 75系列的第二题。我想分享一下我是如何解决这个问题的。

问题陈述:
给定两个字符串,str1 和 str2。返回最大的字符串 x,使得 x 可以整除 str1 和 str2。

示例:

输入:str1 = "ABCABC", str2 = "ABC"
输出:“ABC”

输入:str1 = "ABABAB", str2 = "ABAB"
输出:“AB”

输入:str1 =“LEET”,str2 =“CODE”
输出:“”
**
我的方法**

我将解决方案分为三个部分:

检查公约数字符串是否存在:
首先,我通过连接 str1 str2 和 str2 str1 来检查是否存在公约数。

如果连接的两个字符串不相等,则表示没有公约数,函数返回空字符串 ("")。

求 GCD 长度:
接下来,我求 str1 和 str2 长度的 GCD。

我使用递归 gcd() 函数。如果 b !== 0,则函数使用两个参数递归调用自身:
gcd(a, b) = gcd(b, a % b)
一旦 b = 0,函数返回 a,即 GCD 长度。

计算示例:

初始调用: gcd(6, 3)
由于 b = 3 不为 0,因此递归调用 gcd(3, 6 % 3) → gcd(3, 0)

第二次调用: gcd(3, 0)
现在 b = 0,因此函数返回 3。

提取 GCD 子串:
最后,我使用 gcdlength 从 str1 中提取子字符串。

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

登录后复制

如果您有更好的解决方案或想法,请随时与我分享。

以上是JavaScript 中字符串的最大公约数的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板