Задача в Яндекс
Дана строка символов. Найти количество пар индексов i и j (i <= j), между которыми включительно нет повторяющихся символов.
Пример
aba -> 5
Решение:
Проходимся один раз по строке с запоминанием последней слева позицией символа и просто считаем ответ.
Типичные ошибки
1) Последняя позиция используется как есть, тогда как строка без повторений может начаться только со следующего символа
2) Используется последняя позиция для текущего символа, а не самая правая позиция последнего повторяющегося символа. В итоге в строке типа "baab" подстрока "aab" будет ошибочно считаться неимеющей повторов
int countUniqueSubstrings(const string& s) {
unordered_map<char, int> last_pos;
int left = 0;
int result = 0;
for (int right = 0; right < s.size(); ++right) {
char current_char = s[right];
if (last_pos.find(current_char) != last_pos.end() && last_pos[current_char] >= left) {
left = last_pos[current_char] + 1;
}
last_pos[current_char] = right;
result += (right - left + 1);
}
return result;
}
@algoses
Post #358
9.49K
- 😁 12
- ❤ 3
- 🔥 3
- 👍 2
- 👏 1