271. 字符串的编码与解码
题目:
解答:
每个串前用分隔符,分隔符指明数据串的长度。
当然实际中的IP分片是:
在IP首部有4个字节是用于分片的,如下图所示。前16位是IP数据报的标识,同一个数据报的各个分片的标识是一样的,目的端会根据这个标识来判断IP分片是否属于同一个IP数据报。中间3位是标志位,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1。后面13位表示分片在原始数据的偏移,这里的原始数据是IP层收到的传输的TCP或UDP数据,不包含IP首部。
class Codec { public: // Encodes a list of strings to a single string. string encode(vector<string>& strs) { string res="",len,prefix; for(auto& str:strs){ len=to_string(str.size()); prefix="";//每个字符串前用一个32长度的指示字符串作为分隔,该指示串表示的整数值指示之后的数据串的长度 if(len.size()<32){ prefix.assign(32-len.size(),'0'); } prefix+=len; res+=prefix; res+=str; } return res; } // Decodes a single string to a list of strings. vector<string> decode(string s) { int i=0,len; vector<string> res; while(i<s.size()){ len=stoi(s.substr(i,32)); i+=32; res.push_back(move(s.substr(i,len))); i+=len; } return move(res); } }; // Your Codec object will be instantiated and called as such: // Codec codec; // codec.decode(codec.encode(strs));
进击的小🐴农