考察的知识点:字符串;

解答方法分析:

  1. 判断拼接后的字符串 str1 + str2 是否与 str2 + str1 相等。如果不相等,说明无法通过拼接产生一个公共字符串,直接返回空字符串 ""。
  2. 如果拼接后的字符串相等,则继续执行下面的代码。
  3. 使用欧几里得算法求出 str1.length() 和 str2.length() 的最大公约数,存储在变量 s 中。这里使用递归实现欧几里得算法的 gcd 函数。
  4. 计算出字符串的最小公倍数 lcm,即 str1.length() * str2.length() / s.length()。
  5. 初始化一个空字符串 ss。
  6. 使用循环,将字符串 s 复制 lcm / s.length() 次,每次拼接到 ss 中。
  7. 返回最终的拼接结果 ss。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str1 string字符串
     * @param str2 string字符串
     * @return string字符串
     */
    string lcmOfStrings(string str1, string str2) {
        if ((str1 + str2) != (str2 + str1)) {
            return "";
        }
        string s = str1.substr(0, gcd(str1.length(), str2.length()));
        string ss = "";
        int lcm = str1.length() * str2.length() / s.length();
        for (int i = 0; i < lcm / s.length(); i++) {
            ss += s;
        }
        return ss;
    }
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
};