Files
obsidian/АиСД/Задачи/LeetCode/Longest Substring with At Most Two Distinct Characters.md
T
roma-dxunvrs 0e6e583e6d
deploy / Pull and Restart (push) Successful in 17s
refactor: wiki links -> md links
2026-09-22 08:52:23 +03:00

27 lines
1.1 KiB
Markdown

Leetcode #159 | #Medium | [Скользящее окно](../../Методы/Скользящее%20окно.md) | [Хэш-таблицы](../../Структуры/Хэш-таблицы.md)
## Идея
Скользящее окно + хэш мапа. Запоминаем частоты символов, если размер мапы больше 2 то двигаем l. Уменьшаем частоты, а если 0 - то удаляем ключ.
## Big-O
- Время ```O(N)```
- Память ```O(1)```
## Код
```Java
class Solution {
public int lengthOfLongestSubstringTwoDistinct(String s) {
Map<Character, Integer> map = new HashMap<>();
int l = 0, res = 0;
for (int r = 0; r < s.length(); r++) {
char c = s.charAt(r);
map.put(c, map.getOrDefault(c, 0) + 1);
while (map.size() > 2) {
char lc = s.charAt(l);
map.put(lc, map.get(lc) - 1);
if (map.get(lc) == 0) map.remove(lc);
l++;
}
res = Math.max(res, r - l + 1);
}
return res;
}
}
```