1.对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/greatest-common-divisor-of-strings
方法一:枚举
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
int len1=(int)str1.length();
int len2=(int)str2.length();
for(int i=min(len1,len2);i>=1;i--)//返回最长,因此从最长的字符串开始枚举
{
if(len1%i==0&&len2%i==0)//长度可以被两个字符串都整除
{
string str=str1.substr(0,i);
if(check(str,str1)&&check(str,str2))
return str;
}
}
return "";
}
bool check(string t,string str)
{
int sum=(int)str.length()/(int)t.length();//计算有几个子长度
string check="";
for(int i=1;i<=sum;i++)
{
check+=t;
}
return check==str;
}
};方法二:如果 str1 和 str2 拼接后等于 str2和 str1 拼接起来的字符串(注意拼接顺序不同),那么一定存在符合条件的字符串 X
class Solution {
public:
string gcdOfStrings(string str1, string str2) {
if (str1 + str2 != str2 + str1) return "";
return str1.substr(0, __gcd((int)str1.length(), (int)str2.length())); // __gcd() 为c++自带的求最大公约数的函数
return "";
}
};
京公网安备 11010502036488号