考察的知识点:字符串;
解答方法分析:
- 判断拼接后的字符串 str1 + str2 是否与 str2 + str1 相等。如果不相等,说明无法通过拼接产生一个公共字符串,直接返回空字符串 ""。
- 如果拼接后的字符串相等,则继续执行下面的代码。
- 使用欧几里得算法求出 str1.length() 和 str2.length() 的最大公约数,存储在变量 s 中。这里使用递归实现欧几里得算法的 gcd 函数。
- 计算出字符串的最小公倍数 lcm,即 str1.length() * str2.length() / s.length()。
- 初始化一个空字符串 ss。
- 使用循环,将字符串 s 复制 lcm / s.length() 次,每次拼接到 ss 中。
- 返回最终的拼接结果 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); } };