log / euclidean algorithm - great common divisor
GCD
Brute Force
func gcd(a,b int) int {
for b != 0 {
a,b = b, a%b
}
return a
}
Recursive
func gcd(a,b int) int {
if a == 0 {
retrun b
}
return gcb(b%a, a)
}
Code Problem
For two strings
sandt, we say “tdividess” if and only ifs = t + t + t + ... + t + t(i.e.,tis concatenated with itself one or more times). Given two stringsstr1andstr2, return the largest stringxsuch thatxdivides bothstr1andstr2.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: ""
Constraints:
1 <= str1.length, str2.length <= 1000str1andstr2consist of English uppercase letters.
Solution
func gcdOfStrings(str1 string, str2 string) string {
a := len(str1)
b := len(str2)
if str1 + str2 != str2 + str1{
return ""
}
i := gcd(a,b)
return str1[:i]
}
func gcd(a,b int) int {
if a == 0 {
return b
}
return gcd(b%a, a)
}