文章目录
- 1. 题目
- 2. 解题
1. 题目
请你设计一个算法,可以将一个 字符串列表 编码成为一个 字符串。
这个编码后的字符串是可以通过网络进行高效传送的,并且可以在接收端被解码回原来的字符串列表。
1 号机(发送方)有如下函数:
string encode(vector<string> strs) {// ... your codereturn encoded_string;
}
2 号机(接收方)有如下函数:
vector<string> decode(string s) {//... your codereturn strs;
}
1 号机(发送方)执行:string encoded_string = encode(strs);
2 号机(接收方)执行:vector<string> strs2 = decode(encoded_string);
此时,2 号机(接收方)的 strs2 需要和 1 号机(发送方)的 strs 相同。请你来实现这个 encode 和 decode 方法。
注意:
因为字符串可能会包含 256 个合法 ascii 字符中的任何字符,所以您的算法必须要能够处理任何可能会出现的字符。
请勿使用 “类成员”、“全局变量” 或 “静态变量” 来存储这些状态,您的编码和解码算法应该是非状态依赖的。
请不要依赖任何方法库,例如 eval 又或者是 serialize 之类的方法。本题的宗旨是需要您自己实现 “编码” 和 “解码” 算法。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/encode-and-decode-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 每个字符串前面加上该字符串的长度信息(转成4位16进制字符)
class Codec {
public:// Encodes a list of strings to a single string.string encode(vector<string>& strs) {string ans;for(auto& s : strs)ans += numToHexIntStr(s.size())+s;return ans;}// Decodes a single string to a list of strings.vector<string> decode(string s) {vector<string> ans;int n;for(int i = 0; i < s.size(); i += 4+n){n = stoi(s.substr(i,4),0,16);//16进制转成10进制ans.emplace_back(s.substr(i+4,n));}return ans;}string numToHexIntStr(int n){char ch[16];sprintf(ch, "%x", n); // x 16进制,d 10进制, o 8进制string ans = ch;while(ans.size() < 4)ans = '0'+ans;return ans;}
};
68 ms 21.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!