271. Encode and Decode Strings

Question: Encode and Decode Strings
Solution

想法:

  1. signal:將一堆字串 encode 成一串字串,為了要辨識不兩個不同字串,會需要一個特殊符號,將兩個字串間隔開來,用來當作字串與字串區隔的 signal。當讀到 signal 的時候,會知道這裡「有可能」是斷點
  2. 字串長度:上面會說「有可能」是斷點,是因為我們設定的特殊符號也有可能會出現在字串中,此時光有符號不夠,還需要字串的長度做搭配,可以確認這個字串有多長

ex: ls = [”neet”, “code”]

我們用 “#” 當作符號區隔

str = “neet#code”,可以讀到 “#” 就知道是字串區隔符號

但當例子變成[”neet”, “cod#e”]時

string = "neet#cod#e”

在 decode 的時候會變成 [”neet”, “cod”, ”e”]

於是加上字串原本長度:

string = “4#neet5#cod#e”

就可以知道原本字串是從哪裡到哪裡了

長度就是 # 之前的 digit,

ls = [”neet”, “cod#######e”]

string = 4#neet11#cod#######e

從頭開始讀,讀到 # 之前就是長度

class Solution:
def encode(l):
res = ""
for s in l:
res += str(len(s)) + "#" + s
return res

def decode(string):
i = 0
ans = list()
while i < len(string):
j = i # j 是長度的開始
if string[j] != "#": # 還沒遇到 "#" 之前的 digit 都是長度
j += 1
s_len = int(string[i:j]) # string 長度就是 i (頭)到 j(# 之前)
ans.append(string[j + 1: j + 1 + s_len]) # 字串本人就是 j + 1 到 j + 1 + 長度
i += (j + 1 + s_len) # 下一個字串就是從 j + 1 + 長度 開始
return ans

Video Solution

Comments

Popular Posts