From c90a267b689602c547a6c275d157fbddb61621be Mon Sep 17 00:00:00 2001 From: t0xa Date: Sun, 1 Feb 2026 21:34:04 +0300 Subject: [PATCH] Add algocode two pointers solution --- algocode/two_pointers/urlify.py | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 algocode/two_pointers/urlify.py diff --git a/algocode/two_pointers/urlify.py b/algocode/two_pointers/urlify.py new file mode 100644 index 0000000..77a4e46 --- /dev/null +++ b/algocode/two_pointers/urlify.py @@ -0,0 +1,51 @@ +""" +Дан список s, представляющий URL-адрес (буквы и пробелы). Нужно заменить все пробелы в первых k символах на %20, используя свободное место в конце списка и вернуть изменённый список s в качестве ответа. + +Пример 1: + +Ввод: s = ["h","e","l","l","o"," ","w","o","r","l","d","#","#"], k = 11 +Вывод: ["h","e","l","l","o","%","2","0","w","o","r","l","d"] +Пример 2: + +Ввод: s = ["a"," ","b"," ", " ", "c","#","#","#","#","#","#"], k = 6 +Вывод: ["a","%","2","0","b","%","2","0","%","2","0", "c"] +Ограничения: + +len(s) >= 1 +""" +from typing import List + +def solve(s: List[str], k: int) -> List[str]: + fast = len(s) - 1 + slow = k - 1 + while slow >= 0: + # Если у нас не пробел + if not s[slow] == " ": + s[fast] = s[slow] + fast -= 1 + slow -= 1 + # Если пробел + else: + s[fast] = "0" + s[fast-1] = "2" + s[fast-2] = "%" + fast -= 3 + slow -= 1 + print(s) + + +solve(s = ["h","e","l","l","o"," ","w","o","r","l","d","#","#"], k = 11) +# Вывод: ["h","e","l","l","o","%","2","0","w","o","r","l","d"] + +solve(s = ["a"," ","b"," ", " ", "c","#","#","#","#","#","#"], k = 6) +# Вывод: ["a","%","2","0","b","%","2","0","%","2","0", "c"] + +# 0 1 2 3 4 5 6 7 8 9 10 11 12 +# "h","e","l","l","o"," ","w","o","r","l","d","#","#" +# s f +# +# 0 1 2 3 4 5 6 7 8 9 10 11 12 +# "a"," ","b"," "," ","c","#","#","#","#","#","#" +# s + +