오늘은 LeetCode 75 시리즈의 두 번째 문제를 풀어보았습니다. 제가 이 문제에 어떻게 접근했는지 공유하고 싶습니다.
문제 설명:
str1과 str2라는 두 개의 문자열이 제공됩니다. x가 str1과 str2를 모두 나누는 가장 큰 문자열 x를 반환합니다.
예:
입력: str1 = "ABCABC", str2 = "ABC"
출력: "ABC"
입력: str1 = "ABABAB", str2 = "ABAB"
출력: "AB"
입력: str1 = "LEET", str2 = "CODE"
출력: ""
**
나의 접근방식**
저는 솔루션을 세 부분으로 나누었습니다.
공약수 문자열이 있는지 확인:
먼저 str1 str2와 str2 str1을 연결하여 공약수가 있는지 확인합니다.
연결된 두 문자열이 같지 않으면 공약수가 없다는 의미이며 함수는 빈 문자열("")을 반환합니다.
GCD 길이 찾기:
다음으로 str1과 str2 길이의 GCD를 구합니다.
재귀적 gcd() 함수를 사용합니다. b !== 0이면 함수는 두 개의 인수를 사용하여 자신을 재귀적으로 호출합니다.
gcd(a, b) = gcd(b, a % b)
b = 0이면 함수는 GCD 길이인 a를 반환합니다.
계산 예:
초기 호출: gcd(6, 3)
b = 3은 0이 아니므로 gcd(3, 6 % 3) → gcd(3, 0)
두 번째 호출: gcd(3, 0)
이제 b = 0이므로 함수는 3을 반환합니다.
GCD 하위 문자열 추출:
마지막으로 gcdlength를 사용하여 str1에서 하위 문자열을 추출합니다.
function gcdOfStrings(str1, str2) { // recursive function to calculate the GCD of two numbers function gcd(a, b) { console.log(a, b); return b === 0 ? a : gcd(b, a % b); } // Step 1: Check if str1 and str2 match or not if (str1 + str2 !== str2 + str1) { return ""; // No common pattern exists } // Step 2: Find the GCD of the lengths of str1 and str2 const len1 = str1.length; const len2 = str2.length; const gcdLength = gcd(len1, len2); // Step 3: The largest divisor substring return str1.substring(0, gcdLength); } // Example usage: console.log(gcdOfStrings("ABCABC", "ABC")); // Output: "ABC" console.log(gcdOfStrings("ABABAB", "ABAB")); // Output: "AB" console.log(gcdOfStrings("LEET", "CODE")); // Output: ""
더 나은 솔루션이나 아이디어가 있으면 언제든지 공유해 주세요.
위 내용은 Javascript에서 문자열의 최대 공약수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!