2串LCM

LCM of 2 strings

鉴于数字和字符串之间存在乘法运算,如果 x 是数字且 s 是字符串,则 s*x 等于字符串 s,因此我必须找到 2 个字符串的 LCM拍了 x 次。

给出的字符串是“baba”和“ba”。现在我什至无法开始使用它,因为如果 LCM 不存在,我必须打印 -1。

请帮忙解决这个问题。我只是c++的初学者。

两个字符串的lcm可以通过计算它们长度的lcm来找到(感谢@Damien)。

int gcd(int a, int b){
    if (b==0)
    {
        return a;
    }
    return gcd(b,a%b);
}

int lcm(int a,int b){
    return (a/gcd(a,b))*b;
}

在你得到它们长度的 lcm 之后,然后你将每个字符串附加到它自己,直到字符串的长度与其长度的 lcm 相同。

string StringLCM(string s,int n){
    string result = s;
    for (int i = 0; i < n-1; i++)
    {
        result.append(s);
    }
    return result;
}

THe StringLCM 函数returns 长度等于 LCM 的字符串。 现在只需比较 2 个字符串并检查它们是否相等。如果找不到 LCM,程序将打印 -1。 下面是完整的代码。

#include<iostream>
using namespace std;

int gcd(int a, int b){
    if (b==0)
    {
        return a;
    }
    return gcd(b,a%b);
}

int lcm(int a,int b){
    return (a/gcd(a,b))*b;
}

string StringLCM(string s,int n){
    string result = s;
    for (int i = 0; i < n-1; i++)
    {
        result.append(s);
    }
    return result;
}
 
int main(){
    string s1 = "aba";
    string s2 = "ab";
    int n1= s1.length();
    int n2= s2.length();
    int l=lcm(n1,n2);  
    cout<<l<<endl;
    int flag=0;
    int e =-1;

    s1=StringLCM(s1,l/n1);
    cout<<s1<<endl;
    s2=StringLCM(s2,l/n2);
    cout<<s2<<endl;

    if (s1==s2)
    {
        flag=1;
    }
    if (flag==1)
    {
        cout<<s1<<endl;
    }else
    {
        cout<<e<<endl;
    }
    return 0;
}