Update repo. Add unURLify solution
This commit is contained in:
parent
c90a267b68
commit
8cb497c6b4
3 changed files with 196 additions and 0 deletions
36
algocode/hash_tables/3sum.py
Normal file
36
algocode/hash_tables/3sum.py
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
class Solution:
|
||||||
|
def threeSum(self, nums: List[int]) -> List[List[int]]:
|
||||||
|
sorted = nums.sort()
|
||||||
|
result = []
|
||||||
|
for i in range(0, len(nums) - 2):
|
||||||
|
if i > 0 and nums[i] == nums[i-1]:
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
j = i + 1
|
||||||
|
k = len(nums) - 1
|
||||||
|
first_num = nums[i]
|
||||||
|
while j < k:
|
||||||
|
second_num = nums[j]
|
||||||
|
third_num = nums[k]
|
||||||
|
tmp_sum = first_num + second_num + third_num
|
||||||
|
if tmp_sum < 0:
|
||||||
|
j += 1
|
||||||
|
elif tmp_sum > 0:
|
||||||
|
k -= 1
|
||||||
|
elif tmp_sum == 0:
|
||||||
|
j += 1
|
||||||
|
result.append([first_num, second_num, third_num])
|
||||||
|
while nums[j-1] == nums[j] and j < k:
|
||||||
|
j += 1
|
||||||
|
else:
|
||||||
|
raise ValueError("Some strange shit happened")
|
||||||
|
i += 1
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
cl = Solution()
|
||||||
|
print(cl.threeSum(nums=[-1,0,1,2,-1,4]))
|
||||||
|
print(cl.threeSum(nums=[0,0,0]))
|
||||||
|
print(cl.threeSum(nums=[0,0,0,0]))
|
||||||
74
algocode/hash_tables/isomorphic_strings.py
Normal file
74
algocode/hash_tables/isomorphic_strings.py
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
class Solution:
|
||||||
|
def isIsomorphic(self, s: str, t: str) -> bool:
|
||||||
|
res = {}
|
||||||
|
already_mapped = set()
|
||||||
|
for i in range(0, len(s)):
|
||||||
|
s_word = s[i]
|
||||||
|
t_word = t[i]
|
||||||
|
if t_word in already_mapped and s_word not in res:
|
||||||
|
return False
|
||||||
|
match = res.get(s_word)
|
||||||
|
# Если не встречался символ
|
||||||
|
if not match:
|
||||||
|
# Пока слова изоморфны - мапим новую пару
|
||||||
|
res[s_word] = t_word
|
||||||
|
already_mapped.add(t_word)
|
||||||
|
continue
|
||||||
|
if match != t_word:
|
||||||
|
return False
|
||||||
|
already_mapped.add(t_word)
|
||||||
|
# Если массив закончился и не было возврата False => слова изоморфны
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
STEP 1
|
||||||
|
s = "badc"
|
||||||
|
t = "baba"
|
||||||
|
|
||||||
|
res = {}
|
||||||
|
match = None
|
||||||
|
res = {"b": "b"}
|
||||||
|
|
||||||
|
STEP 2
|
||||||
|
s = "badc"
|
||||||
|
t = "baba"
|
||||||
|
|
||||||
|
res = {"b": "b"}
|
||||||
|
match = None
|
||||||
|
res = {"b": "b", "a":"a"}
|
||||||
|
|
||||||
|
STEP 3
|
||||||
|
s = "badc"
|
||||||
|
t = "baba"
|
||||||
|
|
||||||
|
res = {"b": "b", "a":"a"}
|
||||||
|
match = None
|
||||||
|
res = {"b": "b", "a":"a", "d": "b"} <- Тут двойной маппинг => надо еще вести уже замапленые символы из t
|
||||||
|
"""
|
||||||
|
|
||||||
|
cl = Solution()
|
||||||
|
# s = "egg"
|
||||||
|
# t = "add"
|
||||||
|
# print(cl.isIsomorphic(s, t))
|
||||||
|
#
|
||||||
|
# s = "foo"
|
||||||
|
# t = "bar"
|
||||||
|
# print(cl.isIsomorphic(s, t))
|
||||||
|
#
|
||||||
|
# s = "paper"
|
||||||
|
# t = "title"
|
||||||
|
# print(cl.isIsomorphic(s, t))
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# s = "p"
|
||||||
|
# t = "t"
|
||||||
|
# print(cl.isIsomorphic(s, t))
|
||||||
|
#
|
||||||
|
# s = "p"
|
||||||
|
# t = "p"
|
||||||
|
# print(cl.isIsomorphic(s, t))
|
||||||
|
|
||||||
|
s = "badc"
|
||||||
|
t = "baba"
|
||||||
|
print(cl.isIsomorphic(s, t))
|
||||||
86
algocode/two_pointers/unurlify.py
Normal file
86
algocode/two_pointers/unurlify.py
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
"""
|
||||||
|
Дан список s. Нужно заменить все вхождения %20 на пробелы в списке s, а оставшиеся лишние символы заменить на #, сохранив длину списка. В качестве ответа верни изменённый список s.
|
||||||
|
|
||||||
|
Пример 1:
|
||||||
|
|
||||||
|
Ввод: s = ["h","e","l","l","o","%","2","0","w","o","r","l","d"]
|
||||||
|
Вывод: ["h","e","l","l","o"," ","w","o","r","l","d","#","#"]
|
||||||
|
Пример 2:
|
||||||
|
|
||||||
|
Ввод: s = ["a","%","2","0","b","%","2","0","%","2","0", "c"]
|
||||||
|
Вывод: ["a"," ","b"," ", " ", "c","#","#","#","#","#","#"]
|
||||||
|
Ограничения:
|
||||||
|
|
||||||
|
len(s) >= 1
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
|
||||||
|
def solve(s: List[str]) -> List[str]:
|
||||||
|
i, j = 0, 0
|
||||||
|
s_len = len(s)
|
||||||
|
for i in range(0, s_len):
|
||||||
|
if j >= s_len:
|
||||||
|
while i < s_len:
|
||||||
|
s[i] = "#"
|
||||||
|
i += 1
|
||||||
|
break
|
||||||
|
s[i] = s[j]
|
||||||
|
if s[i] == "%":
|
||||||
|
s[i] = " "
|
||||||
|
j += 3
|
||||||
|
i += 1
|
||||||
|
else:
|
||||||
|
i += 1
|
||||||
|
j += 1
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
print(solve(s=["h", "e", "l", "l", "o", "%", "2", "0", "w", "o", "r", "l", "d"]))
|
||||||
|
print(solve(s=["a", "%", "2", "0", "b", "%", "2", "0", "%", "2", "0", "c"]))
|
||||||
|
|
||||||
|
# i
|
||||||
|
# "a","%","2","0","b","%","2","0","%","2","0", "c"
|
||||||
|
# j
|
||||||
|
#
|
||||||
|
# --- i+=1 j+=1 ---
|
||||||
|
#
|
||||||
|
# i
|
||||||
|
# "a","%","2","0","b","%","2","0","%","2","0", "c"
|
||||||
|
# j
|
||||||
|
#
|
||||||
|
# Заменяем процент на пробел
|
||||||
|
#
|
||||||
|
# --- i+=1 j+=3 ---
|
||||||
|
#
|
||||||
|
# i
|
||||||
|
# "a"," ","2","0","b","%","2","0","%","2","0", "c"
|
||||||
|
# j
|
||||||
|
#
|
||||||
|
# --- i+=1 j+=1 ---
|
||||||
|
#
|
||||||
|
# i
|
||||||
|
# "a"," ","b","0","b","%","2","0","%","2","0", "c"
|
||||||
|
# j
|
||||||
|
# Замена s[i] = s[j] приводит к процентной итерации
|
||||||
|
#
|
||||||
|
# --- i+=1 j+=3 ---
|
||||||
|
#
|
||||||
|
# i
|
||||||
|
# "a"," ","b"," ","b","%","2","0","%","2","0", "c"
|
||||||
|
# j
|
||||||
|
#
|
||||||
|
# Замена s[i] = s[j] приводит к процентной итерации
|
||||||
|
#
|
||||||
|
# --- i+=1 j+=3 ---
|
||||||
|
#
|
||||||
|
# i
|
||||||
|
# "a"," ","b"," "," ","%","2","0","%","2","0", "c"
|
||||||
|
# j
|
||||||
|
#
|
||||||
|
# --- i+=1 j+=1 ---
|
||||||
|
#
|
||||||
|
# i
|
||||||
|
# "a"," ","b"," "," ","c","2","0","%","2","0", "c"
|
||||||
|
# j
|
||||||
Loading…
Reference in a new issue