1. 问题背景与需求解析
1374题是LeetCode上一道有趣的字符串操作题目,题目要求生成一个包含n个字符的字符串,且字符串中每种字符的出现次数都是奇数。这道题看似简单,但考察了开发者对字符串特性的理解和对边界条件的处理能力。
在实际编程面试中,这类题目经常被用来考察候选人的基础编码能力和思维灵活性。我在第一次遇到这个问题时,花了约15分钟才找到最优解,经过多次优化后最终实现了100%的耗时表现。下面我将分享这个问题的完整解决思路和优化过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路分析
2.1 问题重述
给定一个整数n,我们需要构造一个字符串满足:
- 字符串长度正好等于n
- 字符串中出现的每种字符的数量都是奇数
例如:
- 输入n=4,可能的输出:"aaab"
- 输入n=5,可能的输出:"aaaaa"
2.2 关键观察点
通过分析题目,我们可以得出几个重要观察:
- 当n本身是奇数时,最简单的解决方案是使用单一字符填充整个字符串
- 当n是偶数时,我们需要至少两种字符来满足条件(因为奇数+奇数=偶数)
- 题目只要求返回任意一个有效解,不要求字典序或特定顺序
2.3 算法选择
基于以上观察,我们可以采用以下策略:
- 如果n是奇数:返回由n个'a'组成的字符串
- 如果n是偶数:返回由(n-1)个'a'和1个'b'组成的字符串
这种方案保证了:
- 当n为奇数时,只有一种字符,其数量n本身就是奇数
- 当n为偶数时,有两种字符:a的数量n-1是奇数,b的数量1也是奇数
3. 代码实现与优化
3.1 基础实现
python复制def generateTheString(n: int) -> str:
if n % 2 == 1:
return 'a' * n
else:
return 'a' * (n - 1) + 'b'
这个实现非常直接,时间复杂度O(n),空间复杂度O(n),因为字符串构造需要线性时间和空间。
3.2 性能优化
虽然上述解法已经足够高效,但我们还可以做一些微优化:
- 使用字符串的join方法可能比乘法拼接稍快
- 对于非常大的n,可以考虑使用生成器表达式
优化后的版本:
pytho复制
