22 lines
940 B
Markdown
22 lines
940 B
Markdown
Leetcode #763 | #Medium | [[Жадный алгоритм]] | [[O(26)]]
|
|
## Идея
|
|
Жадный алгоритм. Запонимаем все последние индексы букв в `int[26]`. Заводим start и end, сдвигаем end, если `i==end`то обновляем старт а перед этим записываем в ответ `end-start+1`
|
|
## [[Big-O]]
|
|
- Время ```O(N)```
|
|
- Память ```O(1)```
|
|
## Код
|
|
```Java
|
|
class Solution {
|
|
public List<Integer> partitionLabels(String s) {
|
|
int[] lastIdx = new int[26];
|
|
for (int i = 0; i < s.length(); i++) lastIdx[s.charAt(i) - 'a'] = i;
|
|
int start = 0, end = 0;
|
|
List<Integer> res = new ArrayList<>();
|
|
for (int i = 0; i < s.length(); i++) {
|
|
end = Math.max(end, lastIdx[s.charAt(i) - 'a']);
|
|
if (i == end) { res.add(end - start + 1); start = i + 1; }
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
``` |