leetcode 1071 최대 공약수 GCD의 유클리드 문자열 문자열

leetcode 1071 최대 공약수 GCD의 유클리드 문자열 문자열

leetcode 2020 3월 1일 질문 매일 펀치
유클리드참조 https://blog.csdn.net/weixin_43973433/article/details/105007066를

제목 :
문자열 S와 T, 단지 S = T를 들어 + ... + T ( T는 그 자체에 한 번 이상 연결), 우리가 확인 된 "T S는 나눌 수 있습니다." 반환 가장 긴 문자열 X, X는 요구 사항을 충족 할 수 있으며, X는 나눌 나눌 str1과의 STR2 될 수 있습니다.

실시 예 1 :
입력 : STR1 = "ABCABC"STR2 = "ABC"
출력 "ABC"
실시 예 2 :
입력 : STR1 = "ababab와"STR2 = "ABAB"
출력 "AB"
실시 예 3 :
입력 : STR1 = " LEET "과 str2 ="CODE "
출력 :" "

팁 :
. 1 <= str1.length <= 1000
1 <= str2.length <= 1000.
STR1 [I] 및 STR2 [I] 대문자

아이디어 :

  1. 두 개의 스트링이 공통 분모를 가지고 있다면, A + B + A == B
  2. 두 문자열 길이는 문자열의 두 규칙 세그먼트 길이의 최대 공약수 같다

코드 :

class Solution(object):
    def gcdOfStrings(self, str1, str2):
        """
        :type str1: str
        :type str2: str
        :rtype: str
        """
        # 如果两个字符串有最大公约数,则a+b == b+a
        if str1+str2 != str2+str1:
            return ""

        # 两字符串最大公约段的长度等于两字符串长度的最大公约数
        # 辗转相除法
        def gcd(m,n):
            return gcd(n,m%n) if n else m
        
        return str1[:gcd(len(str1),len(str2))]
                

이 블로그는 소스를 표시이 문서에 링크를 첨부하시기 바랍니다, 지침을 환영 복제, 원래의 작품입니다, 감사합니다!

게시 20 개 원래 기사 · 원 찬양 한 · 전망 (190)

추천

출처blog.csdn.net/weixin_43973433/article/details/105007655