Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - 763 Partition Labels
- // Разбить строку на подстроки так чтобы буква встречалась только в одной подстроке (буква одна, а ее кол-во >= 1)
- // Решение
- // Пробежаться по строке и составить словарь [буква : последний индекс где она встречалась]
- // Заведем переменные size и end
- func partitionLabels(_ s: String) -> [Int] {
- var s = Array(s).map{String($0)}
- var dict = [String:Int]()
- var result = [Int]()
- for (index, char) in s.enumerated() {
- dict[char] = index
- }
- // Идем по строке и смотрим в словаре где последний раз встречается буква - там и конец,
- // Если для следующей буквы уонец будет ближе, то не обновляем end.
- // Например, "abba" - end так и останется на 3, так как индекс последнего вхождения b меньше последнего вх а
- var end = 0
- var size = 0
- for (index, char) in s.enumerated() {
- size += 1
- // dict[char] - возвращает позицию последнего вхождения буквы
- let currLastInd = dict[char]!
- if currLastInd > end {
- end = currLastInd
- }
- // end = max(currLastInd, end) // или так
- if index == end {
- result.append(size)
- size = 0
- }
- }
- return result
- }
- partitionLabels("ababcbacadefegdehijhklij")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement