This piece of code can be got AC, the basic idea is to join all the string with some very special pattern, it's not proper because it will become crashed when the pattern actually appears on the string itself. I believe a more reasonable way is to join all the string and append with a suffix array with individual entry is exactly a say 8-bits number string where s[-1] denote how much more fixed length of arrays are ahead of it, and then backtracking those length, and then will be relatively safe to decode.
class Codec: def encode(self, strs): if not strs: return "None" return '|--|'.join(strs) def decode(self, s): if s == "None": return  return s.split('|--|')
A more decent way to AC:
def getFiveDigitNum(self, l): while len(l) < 5: l = '0' + l return l def encode(self, strs): """Encodes a list of strings to a single string. :type strs: List[str] :rtype: str """ if not strs: return '' l = self.getFiveDigitNum(str(len(strs))) ans =  decode = '' for s in strs: decode += s ans.append(self.getFiveDigitNum(str(len(s)))) ans.append(l) decode += ''.join(ans) return decode def decode(self, s): """Decodes a single string to a list of strings. :type s: str :rtype: List[str] """ if not s: return  length = int(s[-5:]) counter =  for i in xrange(2, length+2): counter.append(int(s[-i * 5 :-(i - 1) * 5])) ans =  for i in xrange(len(counter)-1, -1, -1): if counter[i] != 0: ans.append(s[:counter[i]]) s = s[counter[i]:] else: ans.append('') return ans