---
# System prepended metadata

title: 【LeetCode 75】1071. Greatest Common Divisor of Strings
tags: [C++, LeetCode, Array, String, Easy]

---

## Description
>For two strings s and t, we say "t divides s" if and only if s = t + ... + t (i.e., t is concatenated with itself one or more times).

>Given two strings `str1` and `str2`, return the largest string `x` such that `x` divides both `str1` and `str2`.

## Constraints:
> `1 <= str1.length, str2.length <= 1000`
`str1` and `str2` consist of English uppercase letters.



## Example1 
    Input: str1 = "ABCABC", str2 = "ABC"
    Output: "ABC"

## Example2
    Input: str1 = "ABABAB", str2 = "ABAB"
    Output: "AB"
## Example3
    Input: str1 = "LEET", str2 = "CODE"
    Output: ""

## Solution
看到題目的意思大概可以往GCD(最大公因數)去猜，看到題目測資時跟我想得很接近，一開始還自己去查了GCD Function怎麼寫，後來發現有現成的可以用。
一開始先判斷兩個字串組成有沒有相同的字母，如果沒有那就去找兩個字串長度的GCD，會發現很剛好的是會回傳答案所需要的東西。

* Time complexity: O(n)
* Space complexity: O(n)
    

## Code
### C++
```cpp=
class Solution {
public:
    string gcdOfStrings(string str1, string str2) {
        if(str1 + str2 != str2 + str1)
            return "";
        return str1.substr(0,__gcd(str1.size(),str2.size()));
    }
};
```
### Python3
```python=
class Solution:
    def gcdOfStrings(self, str1: str, str2: str) -> str:
        if str1 + str2 != str2 + str1:
            return ""
        return str1[:gcd(len(str1),len(str2))]
```
