# 1071.Greatest Common Divisor of Strings

**1071.Greatest Common Divisor of Strings**

难度:Easy

> For strings S and T, we say "T divides S" if and only if S = T + ... + T (T concatenated with itself 1 or more times)

Return the largest string X such that X divides str1 and X divides str2.

```
Example 1:

Input: str1 = "ABCABC", str2 = "ABC"
Output: "ABC"
Example 2:

Input: str1 = "ABABAB", str2 = "ABAB"
Output: "AB"
Example 3:

Input: str1 = "LEET", str2 = "CODE"
Output: ""
 

Note:

1 <= str1.length <= 1000
1 <= str2.length <= 1000
str1[i] and str2[i] are English uppercase letters.
```

其實和最大公約數求法很近，可以先求兩個字串的長度，如果相等，直接比較字串是否相等；如果不相等，求出長度的倍數和餘數，然後比較整除部分是否是循環，如果不是則不存在最大公約數。如果是，將餘數拿來和較小的字串重新進行比較，得出最大公約數。\
類似於輾轉相除法。

```
class Solution {
public:
    string gcdOfStrings(string str1, string str2) {       
        if(str1.length()==str2.length()) return str1==str2?str1:"";

 //       cout<<str1.length() <<"   "<< str2.length()<<endl;
        if(str1.length()< str2.length()) swap(str1, str2);
        
            int n=str1.length()/str2.length();
            int m=str1.length()%str2.length();
       // cout<<n<<"   "<< m<< endl;
            for(int i=1;i<n;i++)
            {
                for(int j=0;j<str2.length();j++)
                {
                    if(str2[j]!=str1[j+i*str2.length()]) return "";
                }
                
            }
            if(m==0) return str2;
            return gcdOfStrings(str2,str2.substr(0,m));
        
        
        
    }
};
```

> 执行用时 :4 ms, 在所有 C++ 提交中击败了95.84%的用户\
> 内存消耗 :8.9MB, 在所有 C++ 提交中击败了100%的用户


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dfine.gitbook.io/leetcode/1071.greatest_common_divisor_of_strings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
