LeetCode 75之
求两正整数的最大公因数是基本的算术问题,而最简单有效的方法是所谓“更相减损”算法。代码如下
int get_gcd(int A, int B)
{
int a = A;
int b = B;
while (a != b) {
if (a > b) {
a -= b;
} else {
b -=a;
}
}
return a;
}
1、同样也可以使用更相减损应用于字符串解题,通过使用strcmp判断当前字符串大小关系,出参cmp大小与字符串长度成正比。
2、通过strstr判断当前2个字符串是否能够满足最大公因子
// 为真时则表示2个字符串肯定无公因子
strstr(str1, str2) != str1 && strstr(str2, str1) != str2
附代码:
char* gcdOfStrings(char* str1, char* str2) {
if (strstr(str1, str2) != str1 && strstr(str2, str1) != str2) {
return "";
}
int pa = 0;
int pb = 0;
int cmp = 0;
do {
cmp = strcmp(str1 + pa, str2 + pb);
if (cmp > 0) {
pa += strlen(str2 + pb);
} else if (cmp < 0) {
pb += strlen(str1 + pa);
}
if (strstr(str1 + pa, str2 + pb) != (str1+pa) && strstr(str2+pb, str1+pa) != (str2+pb)) {
return "";
}
} while (cmp);
return str1 + pa;
}