跳转至

1071.字符串的最大公因子 (Easy)*

题目描述*

对于字符串  S 和  T,只有在 S = T + ... + T(T  与自身连接 1 次或多次)时,我们才认定  “T 能除尽 S”。

返回最长字符串  X,要求满足  X 能除尽 str1 且  X 能除尽 str2。

示例*

输入:str1 = "ABABAB", str2 = "ABAB"

输出:"AB"

提示*

1 <= str1.length <= 1000, 1 <= str2.length <= 1000

str1[i] 和  str2[i] 为大写英文字母

代码*

如果 str1, str2 存在最大公因子串,那么应该有 str1 + str2 == str2 + str1。且子串长度应该就是两串长度的最大公因子,使用欧几里得算法求公因子。

class Solution {
    int myGcd(int p, int q) {
        return q == 0 ? p : gcd(q, p % q);
    }
public:
    string gcdOfStrings(string str1, string str2) {
        int len1 = str1.length();
        int len2 = str2.length();
        if(str1 + str2 != str2 + str1) {
            return "";
        }
        int len = myGcd(len1, len2);
        return str1.substr(0, len);
    }
};

最后更新: July 23, 2022