1071. 字符串的最大公因子

題目鏈接:

1071. 字符串的最大公因子

題目描述:

對于字符串 S 和 T系奉,只有在 S = T + ... + T(T 與自身連接 1 次或多次)時(shí)矮瘟,我們才認(rèn)定 “T 能除盡 S”。

返回最長字符串 X饭望,要求滿足 X 能除盡 str1 且 X 能除盡 str2仗哨。

  • 示例 1:
    輸入:str1 = "ABCABC", str2 = "ABC"
    輸出:"ABC"
  • 示例 2:
    輸入:str1 = "ABABAB", str2 = "ABAB"
    輸出:"AB"
  • 示例 3:
    輸入:str1 = "LEET", str2 = "CODE"
    輸出:""

提示:
1 <= str1.length <= 1000
1 <= str2.length <= 1000
str1[i] 和 str2[i] 為大寫英文字母

算法:

題目分為兩個(gè)解題步驟:
第一步形庭,我們需要判斷S和T是否存在最大共因子。假設(shè)S和T存在最大公因子X厌漂,則有S=mX萨醒,T=nX。那么S+T=(m+n)X=T+S苇倡。反之富纸,如果不存在最大公因子,則假設(shè)S=mX旨椒,T=nX'晓褪,則S+T=mX+nX'≠nX'+mX=T+S。
第二步综慎,是求出最大公因子涣仿。通過第一步,我們已經(jīng)知道S和T存在最大公因子X了示惊,即S=mX变过,T=nX。假設(shè)S長度大于T涝涤,則我們有S-T=(m-n)X媚狰,同樣是S和T的最大公因子。即S字符串從S[T.size()]到S[S.size()-1]的部分S'阔拳,同樣可以除盡最大公因子崭孤。接著我們可以用較短的T和剛剛求出來的S’重復(fù)上述步驟,直到求出最大公因子糊肠。這個(gè)思路實(shí)際上是GCD(輾轉(zhuǎn)相除法)在字符串領(lǐng)域的擴(kuò)充辨宠。

事實(shí)上,我們只考慮字符串的長度货裹。假設(shè)S的長度為m嗤形,T的長度為n,那么如果S和T存在最大公因子弧圆,那么最大公因子的長度一定是m和n的長度赋兵。因此我們可以直接求出m和n的最大公因數(shù)k,并且取S的最前面k個(gè)數(shù)進(jìn)行返回搔预。

代碼:

// 處理字符串
class Solution {
public:
    string gcdOfStrings(string str1, string str2) {
        if (str1 + str2 != str2 + str1) return "";

        if (str1 == str2)
            return str1;
        else if (str1.size() < str2.size())
            return gcdOfStrings(str1, str2.substr(str1.size()));
        else
            return gcdOfStrings(str2, str1.substr(str2.size()));
    }
};

// 處理字符串長度
class Solution {
public:
    string gcdOfStrings(string str1, string str2) {
        if (str1 + str2 != str2 + str1) return "";

        return str1.substr(0, gcd(str1.size(), str2.size()));
    }
private:
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霹期,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拯田,更是在濱河造成了極大的恐慌历造,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吭产,居然都是意外死亡侣监,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門臣淤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來达吞,“玉大人,你說我怎么就攤上這事荒典。” “怎么了吞鸭?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵寺董,是天一觀的道長。 經(jīng)常有香客問我刻剥,道長遮咖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任造虏,我火速辦了婚禮御吞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漓藕。我一直安慰自己陶珠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布享钞。 她就那樣靜靜地躺著揍诽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栗竖。 梳的紋絲不亂的頭發(fā)上暑脆,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音狐肢,去河邊找鬼添吗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛份名,可吹牛的內(nèi)容都是我干的碟联。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼僵腺,長吁一口氣:“原來是場噩夢啊……” “哼玄帕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起想邦,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤裤纹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹰椒,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锡移,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漆际。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淆珊。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奸汇,靈堂內(nèi)的尸體忽然破棺而出施符,到底是詐尸還是另有隱情,我是刑警寧澤擂找,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布戳吝,位于F島的核電站,受9級特大地震影響贯涎,放射性物質(zhì)發(fā)生泄漏听哭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一塘雳、第九天 我趴在偏房一處隱蔽的房頂上張望陆盘。 院中可真熱鬧,春花似錦败明、人聲如沸隘马。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祟霍。三九已至,卻和暖如春盈包,著一層夾襖步出監(jiān)牢的瞬間沸呐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工呢燥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崭添,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓叛氨,卻偏偏與公主長得像呼渣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子寞埠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容