763. 划分字母区间
Posted yonezu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了763. 划分字母区间相关的知识,希望对你有一定的参考价值。
方法一:滑动窗口
class Solution { public List<Integer> partitionLabels(String s) { List<Integer> res = new ArrayList<>(); int[] arr = new int[128]; for(char c : s.toCharArray()) { arr[c]++; } int[] window = new int[128]; int n = s.length(), i = 0, j = 0, sumChar = 0, count = 0; while(j < n) { char c = s.charAt(j++); if(window[c] == 0) sumChar++; if(++window[c] == arr[c]) count++; if(sumChar == count) { res.add(j - i); i = j; sumChar = 0; count = 0; } } return res; } }
方法二:贪心,考虑好每个字符的最远出现位置
class Solution { public List<Integer> partitionLabels(String s) { List<Integer> res = new ArrayList<>(); int[] arr = new int[26]; // 存储每个字符最后一个位置 for(int i = 0; i < s.length(); i++) { arr[s.charAt(i)-‘a‘] = i; } int start = 0, j = 0; for(int i = 0; i < s.length(); i++) { j = Math.max(j,arr[s.charAt(i)-‘a‘]);// j为当前遍历字符的最远的位置 if(i == j) { // 当前包含所有已遍历字符就可以加入 res.add(i - start + 1); start = i + 1; } } return res; } }
以上是关于763. 划分字母区间的主要内容,如果未能解决你的问题,请参考以下文章
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试