leetcode1071:GCD文字列

タイトルは、与えられた文字列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()))  : "";
    }
公開された44元の記事 ウォン称賛51 ビュー80000 +

おすすめ

転載: blog.csdn.net/Hanghang_/article/details/104906066