Skip to main content

271. Encode and Decode Strings

Design an algorithm to encode a list of strings to a string. The encoded string is then sent over the network and is decoded back to the original list of strings.

Please implement encode and decode

Solution

class Solution:
def encode(self, strs):
res = []
for s in strs:
res.append(str(len(s)) + "#" + s)
return "".join(res)

def decode(self, s):
res, i = [], 0

while i < len(s):
j = i
while s[j] != "#":
j += 1
length = int(s[i:j])
res.append(s[j + 1 : j + 1 + length])
i = j + 1 + length
return res

Time Complexity: O(n)

Space Complexity: O(n)

Explanation

The key idea is to prepend each word with its length and a termination character so that decode is able to process any input.

String concatenation can be made more efficient by emulating java's string builder. i.e. making it a empty list and basically append all the strings. Then simply use "".join(res), or whatever you name the list.