题解 | #名字串生成II#
名字串生成II
https://www.nowcoder.com/practice/a90b0c33344e4b8488fe0b376de3205d
知识点
字符串,lcm,gcd
思路
为了求两个字符串能够组成的最小大字符串,首先要确定这个大字符串的长度k,为
即 然后借助上一题的最大公共子串,即可还原出长度为k的最小大字符串
代码c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str1 string字符串
* @param str2 string字符串
* @return string字符串
*/
int gcd(int a,int b)
{
return b<=0?a:gcd(b,a%b);
}
string lcmOfStrings(string str1, string str2) {
// write code here
string ans;
int k=gcd(str1.size(),str2.size());
for(int i=0,j=0;i<k&&j<k;i++,j++)
{
if(str1[i]==str2[j])ans+=str1[i];
else return "";
}
string t=ans;//暂时存储字符子串
int a=(str1.size()*str2.size()/k);//最终字符串的长度
a/=ans.size();//字符子串的个数
for(int i=1;i<a;i++)
{
ans+=t;
}
return ans;
}
};