题目:对于字符串 s 和 t,只有在 s = t + ... + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。 给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 X 能除尽 str2 。
很遗憾一道简单题想了半天没有做出来,直接上标准答案
var gcdOfStrings = function(str1, str2) {
if (str1 + str2 !== str2 + str1) return "";
const gcd = (a, b) => (b === 0 ? a : gcd(b, a%b));
return str1.substring(0, gcd(str1.length, str2.length));
};
代码很少,就三行,但是写的时候真的没有头绪,就当积累了。一行一行来解释
第一行:对于有公因数的两个字符串,假设str1有m个x,str2有n个x,那么str1和str2合起来就一共有m+n个x,并且两个字符串交换顺序是一样的,可以用这一点来排除没有公因数的情况
第二行:gcd算法,也叫做碾转相除法,用来找到两个字符串的最大公因数的个数
第三行:字符串的substring方法提取指定两个下标间的值