Skip to content

Commit 9f61dcc

Browse files
committed
feat: [LeetCode #394] Decode String
Тип: Stack Сложность: medium Временная сложность: O(n) Пространственная сложность: O(n) - Ссылка: https://leetcode.com/problems/decode-string/
1 parent fead614 commit 9f61dcc

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

src/stack/decode_string/__init__.py

Whitespace-only changes.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def decodeString(self, s: str) -> str:
3+
stack = []
4+
number = []
5+
6+
for char in s:
7+
if char.isdigit():
8+
number.append(char)
9+
elif char == '[':
10+
stack.append("".join(number))
11+
number = []
12+
elif char == ']':
13+
alphas = []
14+
while stack[-1].isalpha():
15+
alphas.append(stack.pop())
16+
stack.extend(reversed(alphas * int(stack.pop())))
17+
else:
18+
stack.append(char)
19+
20+
return "".join(stack)

tests/test_decode_string.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import pytest
2+
from src.stack.decode_string.solution import (
3+
Solution,
4+
)
5+
6+
7+
@pytest.mark.parametrize(
8+
"s, expected",
9+
[
10+
("3[a]2[bc]", "aaabcbc"),
11+
("3[a2[c]]", "accaccacc"),
12+
("2[abc]3[cd]ef", "abcabccdcdcdef"),
13+
],
14+
)
15+
def test_decode_string(s, expected):
16+
solution = Solution()
17+
assert solution.decodeString(s) == expected

0 commit comments

Comments
 (0)