题目:
对于字符串 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 ""
提交

有点啰嗦啊,看着好像优化下。
// END 希望变成能力与发量成正比。
网友评论