每日一题之划分字母区间

LEETCODE每日一题系列

作为一个通信人,平对对CS方面的东西都是东看一点西看一点的碎片化的东西。最近不是特别忙,打算坚持做一个刷题系列,每天跟着LEETCODE官网刷题,把网站的每日一题,自己的想法、思路和代码发不出来,大家一起讨论讨论,说不定会有更好的实现方案!

2020.10.22今日题目

题目描述

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
示例 1:
输入:S = “ababcbacadefegdehijhklij”
输出:[9,7,8]
解释:
划分结果为 “ababcbaca”, “defegde”, “hijhklij”。
每个字母最多出现在一个片段中。
像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。
提示:
S的长度在[1, 500]之间。
S只包含小写字母 ‘a’ 到 ‘z’ 。
链接:https://leetcode-cn.com/problems/partition-labels

题目解读

首先注意到字符串只包括小写字母,并且长度最长的500,大胆猜测是可以使用暴力破解法的。暴力法需要找到每种划分成字符片段的方式,并且对每个字符片段检查是否包含的字符串只出现在该字符片段中,最后从所有划分中找到一个划分片段最多的方案,返回长度列表。
可以看出来上述暴力破解法,有大量重复和不必要的处理。对于一个字符片段而言,要求同一个字母只出现在该片段中,也就是说,对于该字符片段中的每一个字母,都只能出现在该字符片段中,这个字母第一次出现和最后一次出现的位置都包括在字符片段中,这也是对该字母而言,长度最短的划分方式了。我们对所有字母都做这个处理,那么这个划分出来的字符片段就是最短的字符片段,每个字符片段保证为最短的划分,此时的划分结果就是字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值