271. Encode and Decode Strings
271. Encode and Decode Strings
這個題目的目的是要做到文字的轉碼,這個技術其實滿常見於資料的傳輸,因為資料在傳輸的時候是沒辦法保留原先的資料格式的,例如我們有一個陣列要傳輸,這個陣列一定要先經過轉碼後變成一串長文字才方便在網路上傳輸。
但是當接收方收到後,要怎麼知道原本的檔案格式,在 http 裡面,就會在轉碼時,就會在每個文字前面,用一個空間來放一些資訊,例如:我利用一個3個字元的空間,紀錄總共有幾個字,在這個題目當中,一個字最長不會超過 200 的字元,所以我可以在文字前面使用三個字元的空間,紀錄說接下來的這個文字有多長。
例如:
['hello', 'word']
->005hello004word
也就是說每次都會讀一個固定的記憶體大小來得知資訊。
class Codec:
def __init__(self, size = 3):
self.size = size
def encode(self, strs: [str]) -> str:
"""Encodes a list of strings to a single string.
"""
res = ''
for s in strs:
chunk_size = len(s)
meta = str(len(s)).zfill(self.size)
res += meta + s
return res
def decode(self, s: str) -> [str]:
"""Decodes a single string to a list of strings.
"""
res = []
i = 0
while i < len(s):
meta = s[i:i+self.size]
chunk_size = int(meta)
i += self.size
string = s[i:i+chunk_size]
res.append(string)
i += chunk_size
return res
# Your Codec object will be instantiated and called as such:
# codec = Codec()
# codec.decode(codec.encode(strs))