最大公因子--字符串--1071. 字符串的最大公因子

一.知識點

1)一組數的所有公因子都是其最大公因子的約數。

2)最大公因子的求法:輾轉相除法。

二.題目

對於字符串 S 和 T,只有在 S = T + ... + T(T 與自身連接 1 次或多次)時,我們才認定 “T 能除盡 S”。

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

 

示例 1:

輸入:str1 = "ABCABC", str2 = "ABC"
輸出:"ABC"

三.思路

求出最大公因子len,判斷str1和str2的長度位len的前綴是否相等,若相等則繼續判斷str1,str2是否由其長度爲len的前綴構成。

只判斷最大公因子是因爲其餘公因子都是最大公因子的約數,即其餘公因子若滿足條件,則可以由若干其餘公因子先構成最大公因子,再由最大公因子去構成str1,str2.

四.code

class Solution {
public:
    int gcd(int len1,int len2){//求最大公因子
        int a=len1,b=len2;
        if(a<b)swap(a,b);
        while(b!=0){
            int rest=a%b;
            a=b;
            b=rest;
        }
        return a;
    }

    string gcdOfStrings(string str1, string str2) {
        int len1=str1.size(),len2=str2.size();
        int g=gcd(len1,len2);
        string sub1=str1.substr(0,g),sub2=str2.substr(0,g);
        if(sub1!=sub2)return "";
        //判斷str1是否由substr構成
        for(int i=g;i<len1;i+=g){
            for(int j=0;j<g;j++){
                if(str1[j]!=str1[j+i])return "";
            }
        }
        //判斷str2是否由substr構成
        for(int i=g;i<len2;i+=g){
            for(int j=0;j<g;j++){
                if(str2[j]!=str2[j+i])return "";
            }
        }
        return sub1;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章