Stringholics algorithm

Stringholics algorithm

本文关键字:algorithm Stringholics      更新时间:2023-10-16

以下是我正在尝试的问题的链接。 https://www.interviewbit.com/problems/stringoholics/

我的代码适用于链接中给出的简单情况。

//function to compute gcd
long long int gcd(long long int a, long long int b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
//function to compute LCM
long long int findlcm(vector<long long int> a)
{
long long int ans = a[0];
// ans contains LCM of arr[0], ..arr[i]
// after i'th iteration,
for (int i = 1; i < a.size(); i++)
ans = ((((a[i] % 1000000007 * ans % 1000000007))) % 1000000007 / (gcd(a[i] % 1000000007, ans % 1000000007)));
return ans % 1000000007;
}
//function to solve given problem
int solve(vector<string>& A)
{
vector<long long int> a; //vetor to store no.of rotations requireda
for (int i = 0; i < A.size(); i++) {
long long int j = 1; //variable to keep track of no.of rotations
string curr = A[i]; //original ith string
long long int n = curr.length(); //length of  ith string
// leftrotatio of string by 1 element
rotate(A[i].begin(), A[i].begin() + j, A[i].end());
//to check if modifies string is same as original
if (A[i] == curr)
a.push_back(j);
else {
while (A[i] != curr) {
rotate(A[i].begin(), A[i].begin() + (j + 1) % n, A[i].end());
j++;
}
a.push_back(j + 1);
} //pushing no.of rotations for ith element
}
long long int c = findlcm(a);
return (int)(c);
}

输入:

A : [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"babaaaabbaba",
"baaaaababaabbaaaaabbbbbbbaabbaaaababbabaababaabaaabbbaaaaa",
"abaabb",
"aababbbbabbaaaabbaaaaaaaababbbabbbbaabbaabaabbaabaababbbababaababaabbababaaabaaaab",
"babaaaaababbbbbabbbbabbaaabaaaababbabbaabbbabbaaaabbbabaaaabaaaababb",
"bbbbbbaaaaaabbbbbbababaabaabbbbbaaabbabbaabbbbaaaaaababbabaaabbabbabbbabbaabbabbbbaabbbaaaaabbabaaab",
"aabaaabaabbbbababbabbabaaaababbababbbabbbbaabbaaaaababbbbbababbbbaaababababab",
"aaaababbbaabbbabaabb",
"ababaaaabbabbbbaaabbababbbabbbabaaa",
"aaabaabbbabaa",
"baababbababbbbbabbabaabbabbbbbaaaabaaaababaa",
"babaa",
"abbabababbbbbbbbbbbaaaaaababbababaaabbbaaaabbbababbabaabbaabbbbaabbbaabbababababaabaaabbaaabbba",
"ababbaabbaaabbbabaabababbbabaaabbbaababaaa",
"abbaaaababbbbaaabaaaabaaaaabaababbabbaababbbabbbbbbbbbabbaabaaabbaaababbbaa",
"bbabababaabbabbabbbabbaababbabaaabbbababab",
"abbbaaabaab",
"bbaaabbaaabbaabbabababa",
"aabaabaaaaaaabaabbbaaababbbbbbababbaabababbaaaaabbabbbabbbaababbaabababbbbbbbbbaabaab",
"babbaaabbabbaabaaabbb",
"bbabaabba",
"baabaaaaabbaaaaaabbbbaaaabababa",
"babbaababaaba",
"baabaabaabbababbaabbabbbbbabaaaabbbbbabbabbbbbabbbabaabbbbabbbbaaabbbbabababaaaababbaaabbabb",
"abbbbaaaabaabbabbaababaabbababbbaaabbabbbbbaaabbabbaabbb",
"bababaaaaabababbabbaabababbbaabbaabaabaabbabbbababbaaabababbababbbb",
"abaaabbbabbbaabba",
"bbbbaaaabbbababaabbbababaaaababbaaaaaabbbabbaababababbba",
"bababaabaaaabbaabbababbaabbaabaabbaaaaaaaababbaaaaaabbaaabaabaaababbababbbbaabbabbabaabab",
"aabbbabaaabababaabbbbaabbabaaabbbaaabbabbbbabaabbbbaabbbaaaaabbbabbbbb",
"aabbbbbbabaabbbabbaababbababaabaaababbbbabbbaababaaaabbaaabaaabaaaabbbabababbab",
"abaaaaababbabaabbbaaaaabbaaaabaaaaaaaababbaabbbaabbabbbabbaaaaaab",
"bbbaabbabbbbbbaaaabbabbbbbbbaaabaababbaaaabbbaababbaaabbbbbbbbabbabababbaaabaabaaabaaaabbbbbabaabaaa",
"bbaaabaaabaaabaabaaabbaabaabbabaabaabbababaaaaabaabbbbaba",
"abaababaaabbabaabaabbbaaabbaabababbabaaabbbbabbbbbaaaaa",
"abba",
"abbbababbaaabbaaabbbabaabbababaaabbbbaaaaababbabbaabbabbbaaabaabbaaaaabaaaabbbaabbbabbbbbbbabb",
"bbabbaaabaaaabbaaaabbbaaaababbbaabaaaaab",
"abbaabaabbaaaaaaaabbaabbabbababaaaaaaabbabaabaabbbabbaabbaababbaabbaba",
"bbbbaababbaaaaaaaaabbbabbbabaabababaababaababa",
"baaabaabbbbbbaabbabbbabaaaaababaabaababbbaaaaaaaabbbbbabbabaaaaaaaabababaabaababaaabbaaaaaaaaabaa",
"aababbbabbaaaaababbabaababbbbbbbbaaabbaaaaabbaabbbba",
"ababababaaaaaabbbabbaaababaabb",
"bababbaababaabbbabbaab",
"baababababbaaaaabbbbbbbbbaabababb",
"bbbbb",
"aabaabbbaabababbababaaaaabbbbaababaabbabbbbbbaabbaaabbababbbabbabbbaabbbab",
"bbaabbbbaabbaaaaaabbbaabababbbaabaaabbbbbabaababbbaababbbaaabaaabaaaababbbbaabbaababb",
"aaababbaaaaabaabababbabaabbbbabbaba" ];

实际结果:423191921预期成果:487555988

我认为你必须取 gcd 的模逆,然后将结果乘以它,然后保存在 ans 变量中,因为模算术中的除法是通过取模逆来完成的。