タイトルは、与えられた文字列1とstr2二つの文字列、文字列割り切れる要件を意味理解X.
STR1とstr2は、複数のXで表すことができることを割り切れる手段
ストリング、よりサイズの大きい文字列または1に等しいとしてX。
STR1 = AX
STR2 = BX
目的は、Xを求めることです
STR1 + STR2 = STR2 + STR1:上記式より、第満足する場合、分割、分割することができるかどうかを決定することができます
次いで、満たした後GCDアルゴリズム、すなわち、ユークリッドアルゴリズムによって割り切れます。
ユークリッド:2つの数の最大公約数が2より大きい/より小さい数の数と数2つの共通の除数で割った剰余に等しいです
外観は、2つの数の最大公約数が現在の除数に等しく、余りが0になるまで数を2で割った再帰的なアプローチを使用することです。
かかわらずSTR1及びSTR2の長さの、ので、[2つの数の最大公約数は、残りの最大公約数により分割された2つの大きい/小さい数値と二つの数字の数に等しいです]
残りより大きい/小さい数を取り、うまく行きます。
int gcd(int a,int b) { return !b? a:gcd(b,a%b); }
string gcdOfStrings(string str1, string str2) {
return (str1+str2) == (str2 + str1) ? str1.substr(0, gcd( str1.size(), str2.size())) : "";
}