763. 划分字母区间-贪心算法
Posted hequnwang10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了763. 划分字母区间-贪心算法相关的知识,希望对你有一定的参考价值。
一、题目描述
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。
示例 1:
输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
二、解题
贪心算法
记录每个小写字母出现的最远距离,然后遍历字符串,使用双指针,记录最远的边界end,以及开始的边界start,当遍历的字符的下标等于记录的最远的边界,说明这个子串就是最长的,更新start。
class Solution
public List<Integer> partitionLabels(String s)
//贪心算法
//使用一个字母数组,记录该字母出现的最远位置
char[] schar = s.toCharArray();
List<Integer> res = new ArrayList<>();
int length = schar.length;
//26个小写字母
int[] index = new int[26];
for (int i = 0; i < length; i++)
index[schar[i] - 'a'] = i;
//取边界的最大值
int start = 0,end = 0;
for (int i = 0; i < length; i++)
end = Math.max(end,index[schar[i] - 'a']);
if(i == end)
res.add(end - start + 1);
start = end + 1;
return res;
时间复杂度:O(n);
以上是关于763. 划分字母区间-贪心算法的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 763. 划分字母区间贪心策略:局部最优大区间划分