知识点

gcd 字符串

思路

假如答案存在的话,一定是s1和s2的公因数长度的子串。而这些子串全都是最大公因数长度子串的子串,如果某一公因数长度的子串是一个解的话,那么最大公因数长度的子串一定也是一个解,而且最大公因数的子串更长。

所以如果存在的话就是最大公因数长度的子串。

实现上我们可以先求出最大公因数长度的子串,然后去验证是否合法。

AC Code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str1 string字符串 
     * @param str2 string字符串 
     * @return string字符串
     */
    string gcdOfStrings(string str1, string str2) {
        int n = str1.size(), m = str2.size();
        int k = __gcd(n, m);
        if (str1.substr(0, k) == str2.substr(0, k) and check(str1, k) and check(str2, k)) return str1.substr(0, k);
        return "";
    }
    bool check(const string& s, int len) {
        for (int i = len; i < s.size(); i ++) {
            if (s[i] != s[i % len]) return false;
        }
        return true;
    }
};