Welcome to Subscribe On Youtube
1071. Greatest Common Divisor of Strings
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.
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.
Solutions
Solution 1: Direct Implementation
This implementation follows the required operations directly. It traverses the relevant values and updates its state as each value is processed. After all required states have been considered, the maintained result is returned.
Solution 2
This implementation follows the required operations directly. After all required states have been considered, the maintained result is returned.
-
class Solution { public String gcdOfStrings(String str1, String str2) { if (!(str1 + str2).equals(str2 + str1)) { return ""; } int len = gcd(str1.length(), str2.length()); return str1.substring(0, len); } private int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } } -
class Solution { public: string gcdOfStrings(string str1, string str2) { if (str1 + str2 != str2 + str1) return ""; int n = __gcd(str1.size(), str2.size()); return str1.substr(0, n); } }; -
class Solution: def gcdOfStrings(self, str1: str, str2: str) -> str: def check(a, b): c = "" while len(c) < len(b): c += a return c == b for i in range(min(len(str1), len(str2)), 0, -1): t = str1[:i] if check(t, str1) and check(t, str2): return t return '' # Solution 2 class Solution: def gcdOfStrings(self, str1: str, str2: str) -> str: if str1 + str2 != str2 + str1: return '' n = gcd(len(str1), len(str2)) return str1[:n] -
func gcdOfStrings(str1 string, str2 string) string { if str1+str2 != str2+str1 { return "" } n := gcd(len(str1), len(str2)) return str1[:n] } func gcd(a, b int) int { if b == 0 { return a } return gcd(b, a%b) } -
impl Solution { pub fn gcd_of_strings(str1: String, str2: String) -> String { if str1.clone() + &str2 != str2.clone() + &str1 { return String::from(""); } fn gcd(a: usize, b: usize) -> usize { if b == 0 { return a; } gcd(b, a % b) } let (m, n) = (str1.len().max(str2.len()), str1.len().min(str2.len())); str1[..gcd(m, n)].to_string() } }