763. 划分字母区间
分析
- 记录每个字母的最远出现位置:
- 遍历字符串,记录每个字符最后一次出现的索引,存储在哈希表
hash
中
- 遍历字符串,记录每个字符最后一次出现的索引,存储在哈希表
- 划分片段:
- 使用变量
start
表示当前片段的起始位置,end
表示当前片段中字符的最远位置 - 遍历字符串时,动态更新当前片段的最远位置
end
- 当当前索引
i
等于end
时,表示当前片段结束,将片段长度加入结果数组res
- 使用变量
- 更新起点:
- 划分一个片段后,将
start
更新为i + 1
,准备划分下一个片段
- 划分一个片段后,将
时间复杂度
- 记录最远位置:
O(n)
,需要遍历一次字符串记录字符的最远位置 - 划分片段:
O(n)
,第二次遍历字符串进行片段划分
总体时间复杂度为 O(n)
空间复杂度
- 哈希表
hash
的空间复杂度为O(k)
,其中k
是字符集大小(对于英文字母,k < 26
) - 结果数组
res
需要额外存储片段长度,空间复杂度为O(p)
,其中p
是片段数量
总体空间复杂度为 O(k + p)
C++代码
|
|