1. 题目解析与核心思路
1370题"上升下降字符串"是一道典型的字符串处理问题,题目要求我们按照特定规则重新排列字符串。具体规则是:先从小到大选取字符拼接,再从大到小选取剩余字符拼接,如此循环直到用完所有字符。
这个题目看似简单,但考察了几个关键编程能力:
- 字符频率统计与处理
- 循环控制与边界条件处理
- 字符串拼接效率优化
我第一次看到这个题目时,发现它很像小时候玩的"接龙游戏"——先按字母顺序接龙,再反着接回来。这种直观类比帮助我快速理解了题目本质。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路详解
2.1 基础解法:频率统计法
最直接的解法是使用哈希表统计字符频率,然后循环处理:
python复制def sortString(s: str) -> str:
from collections import defaultdict
freq = defaultdict(int)
for ch in s:
freq[ch] += 1
result = []
while len(result) < len(s):
# 上升阶段
for ch in sorted(freq.keys()):
if freq[ch] > 0:
result.append(ch)
freq[ch] -= 1
# 下降阶段
for ch in sorted(freq.keys(), reverse=True):
if freq[ch] > 0:
result.append(ch)
freq[ch] -= 1
return ''.join(result)
这个解法的时间复杂度是O(n^2),因为每次循环都要遍历整个字母表。对于小写字母来说,字母表大小固定为26,所以实际复杂度可以看作O(n)。
2.2 优化解法:桶排序思想
我们可以进一步优化,使用固定大小的数组代替哈希表:
python复制def sort
