1. 题目解析与解题思路
这道题目要求我们找到两个字符串的最大公因子字符串。所谓"公因子字符串",指的是能够通过重复自身构成原字符串的子串。比如对于"ABCABC"和"ABC"来说,"ABC"就是它们的最大公因子字符串,因为:
- "ABC" × 2 = "ABCABC"
- "ABC" × 1 = "ABC"
1.1 问题理解的关键点
-
字符串可除尽的条件:只有当字符串t重复若干次能构成字符串s时,我们才说t能除尽s。这与数学中的整除概念类似,只是操作对象变成了字符串。
-
最大公因子的定义:我们需要找到最长的字符串x,使得x能同时除尽str1和str2。这与数学中最大公约数(GCD)的概念非常相似。
-
边界情况:当两个字符串没有公因子时(如"LEET"和"CODE"),应该返回空字符串""。
1.2 解题思路分析
这道题可以类比数学中求最大公约数的问题。在数学中,我们有以下性质:
- 如果a和b都能被d整除,那么d是a和b的公约数
- 最大公约数是所有公约数中最大的那个
对于字符串,我们可以建立类似的逻辑:
- 公因子字符串的长度必须是两个原字符串长度的公约数
- 最大的公因子字符串对应最大的公约数长度
- 候选字符串必须能通过重复构成原字符串
基于这个思路,我们可以采用枚举法,从可能的长度开始检查,找到满足条件的最大字符串。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 枚举法详细解析
2.1 算法步骤拆解
枚举法的核心思路是从最长的可能公因子开始尝试,一旦找到符合条件的就立即返回,这样可以保证找到的就是最大的公因子。具体步骤如下:
- 确定枚举范围:从两个字符串长度的最小值开始,倒序枚举到1
- 长度筛选:检查当前长度是否能同时整除两个字符串的长度
- 候选验证:取出候选子串,验证是否能通过重复构成原字符串
- 返回结果:第一个满足条件的子串就是最大公因子
2.2 代码逐行解析
python复制class Solution:
def gcdOfStrings(self, str1: str, str2: str) -> str:
# 从两个字符串长度的最小值开始倒序遍历
for i in range(m
