java算法题解Leetcode763划分字母区间示例
题目
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。
示例: 输入:S = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
提示: S的长度在[1, 500]之间。 S只包含小写字母 'a' 到 'z' 。
解题思路
1)解决问题的根本在于,找到一个区间,这个区间内的字符,没有在其他区间出现过
2)那我们就想找到这个区间的开始位置、结束位置,针对这个区间的每个字符,如果字符出现的lastIndex大于当前统计到的stop,则stop更新为此边界,直到遍历到这个stop边界,证明此次遍历,start->stop这个区间内,已经包含所有重复字符
import java.util.ArrayList; import java.util.List; class Solution { public List<Integer> partitionLabels(String s) { List<Integer> res = new ArrayList<Integer>(); if (s == null || s.length() == 0) { return res; } int start = 0, stop = 0; for (int i = start; i < s.length(); i++) { if (s.lastIndexOf(s.charAt(i)) > stop) { stop = s.lastIndexOf(s.charAt(i)); } if (i == stop) { res.add(stop - start + 1); start = i + 1; } } return res; } }
以上就是java算法题解Leetcode763划分字母区间示例的详细内容,更多关于java算法划分字母区间的资料请关注脚本之家其它相关文章!
相关文章
解决使用mybatis-plus时,生成的SQL大写变小写加下划线问题
这篇文章主要介绍了解决使用mybatis-plus时,生成的SQL大写变小写加下划线问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-12-12Spring Boot 中的 Spring Cloud Feign的原
Spring Cloud Feign 是 Spring Cloud 中的一个组件,它可以帮助我们实现声明式的 REST 客户,这篇文章主要介绍了Spring Boot 中的 Spring Cloud Feign,需要的朋友可以参考下2023-07-07解决redisTemplate中leftPushAll隐性bug的问题
这篇文章主要介绍了解决redisTemplate中leftPushAll隐性bug的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-02-02Java class文件格式之数据类型_动力节点Java学院整理
这篇文章主要介绍了Java class文件格式之数据类型的相关资料,需要的朋友可以参考下2017-06-06
最新评论