每日一题划分字母区间(双指针,贪心策略)

it2025-07-16  3

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的 片段,同一个字母只会出现在其中的一个片段。返回一个表示每个 字符串片段的长度的列表。 思路: 一个字母第一次出现的位置一定和最后一次出现的位置在同一 区间内。 先把每个字母的最后一次出现的位置存储起来 然后去遍历 设置end不断去更新end 代码: class Solution { public List<Integer> partitionLabels(String S) { int[] a=new int[26]; //存最后一个出现的下标 for(int i=0;i<S.length();i++) { a[S.charAt(i)-'a']=i; } List<Integer> partition = new ArrayList<Integer>(); int start=0,end=0; for(int i=0;i<S.length();i++) { end=Math.max(end,a[S.charAt(i)-'a']); if(i==end) { partition.add(end-start+1); start=end+1; } } return partition; } }
最新回复(0)