Encode and Decode Strings — Delimiter and Length-Prefix Schemes

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

Problem (LeetCode 271)

Design encode(strs) and decode(s) such that a list of strings can be serialized to a single string and back.


Approach 1 — Length-Prefix (Robust)

Format: [4-byte-length][string] for each string.

def encode(strs):
    return ''.join(f'{len(s):04d}#{s}' for s in strs)

def decode(s):
    strs, i = [], 0
    while i < len(s):
        length = int(s[i:i+4])
        strs.append(s[i+5:i+5+length])
        i += 5+length
    return strs

Approach 2 — Escape Delimiter

Use : as delimiter, escape literal : as ::.


Solutions

Python

def encode(strs):
    result = []
    for s in strs:
        result.append(str(len(s)) + '#' + s)
    return ''.join(result)

def decode(s):
    strs = []
    i = 0
    while i < len(s):
        j = s.index('#', i)
        length = int(s[i:j])
        strs.append(s[j+1:j+1+length])
        i = j+1+length
    return strs

JavaScript

const encode=(strs)=>strs.map(s=>s.length+'#'+s).join('');
const decode=(s)=>{
    const res=[]; let i=0;
    while(i<s.length){const j=s.indexOf('#',i);const l=+s.slice(i,j);res.push(s.slice(j+1,j+1+l));i=j+1+l;}
    return res;
};

Java

public String encode(List<String> strs){StringBuilder sb=new StringBuilder();for(String s:strs)sb.append(s.length()).append('#').append(s);return sb.toString();}
public List<String> decode(String s){List<String>res=new ArrayList<>();int i=0;while(i<s.length()){int j=s.indexOf('#',i);int l=Integer.parseInt(s.substring(i,j));res.add(s.substring(j+1,j+1+l));i=j+1+l;}return res;}

C++

#include <string>
#include <vector>
using namespace std;
string encode(vector<string>&v){string r;for(auto&s:v)r+=to_string(s.size())+'#'+s;return r;}
vector<string> decode(string s){vector<string>r;int i=0;while(i<(int)s.size()){int j=s.find('#',i);int l=stoi(s.substr(i,j-i));r.push_back(s.substr(j+1,l));i=j+1+l;}return r;}

C

/* C: write length as 4-byte int + string content, read back same way */

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro