题目
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。
例:
输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
方法
- record 记录每个字母的最远边界
- 循环遍历数组,实现对每个字母最远边界的记录
- result 记录每个字符串片段的长度,left 表示此时片段的最左边界的下标,right 表示此时片段的最右边界的下标
- 循环遍历数组,不断更新此片段的最远边界 right。若此时的下标等于最远边界的下标,表示此时片段的所有元素均包括在该片段中,且该片段外无该片段的字母,则划分片段,将该片段的长度放入 result,并更新最左边界 left 的下标
class Solution(object):
def partitionLabels(self, s):
record = [0] * 26
for i in range(len(s)):
record[ord(s[i]) - ord('a')] = i
result = []
left, right = 0, 0
for i in range(len(s)):
right = max(right, record[ord(s[i]) - ord('a')])
if i == right:
result.append(right - left + 1)
left = i + 1
return result
相关知识
-
ord(c):
ord()
返回对应字符的 ASCII 数值,或者 Unicode 数值
c: 字符
ord('a') # 结果是:97
ord('z') # 结果是:122
参考
代码相关:https://programmercarl.com/0763.%E5%88%92%E5%88%86%E5%AD%97%E6%AF%8D%E5%8C%BA%E9%97%B4.html
ord():https://www.runoob.com/python3/python3-func-ord.html
网友评论