字符串的最大公因子

作者: _阿南_ | 来源:发表于2020-03-12 11:43 被阅读0次

题目:

对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 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)判断str1和str2的长度获取,获取最短的字符串short_str
(2)按short_str的长度length递减获取子字符串sub_str
(3)获取str1中包含sub_str的个数num,num * length 是否等于str1的长度
(4)同3来判断str2。如果都成立则返回sub_str。

python实现

class Solution:
    def gcdOfStrings(self, str1: str, str2: str) -> str:
        result_length = 0
        short_str = ''
        if len(str1) >= len(str2):
            short_str = str2
            result_length = len(str2)
        else:
            short_str = str1
            result_length = len(str1)

        def compare(length: int) -> str:
            nums = result_length - length

            for index in range(nums + 1):
                str_temp = short_str[index:length + index]

                nums = str1.count(str_temp)
                if len(str1) % length != 0 or nums != int(len(str1) / length):
                    continue

                nums = str2.count(str_temp)
                if len(str2) % length != 0 or nums != int(len(str2) / length):
                    continue

                return str_temp

            return ""

        while True:
            result = compare(result_length)

            if len(result) > 0:
                return result

            result_length -= 1

            if result_length <= 0:
                break

        return ""

提交

ok

有点啰嗦啊,看着好像优化下。

// END 希望变成能力与发量成正比。

相关文章

网友评论

    本文标题:字符串的最大公因子

    本文链接:https://www.haomeiwen.com/subject/oeoyjhtx.html