题目地址:
https://leetcode.com/problems/encode-and-decode-strings/description/
要求设计一个编码和解码器,编码器输入是字符串数组,输出是一个字符串,而解码器反之。这两个器满足先编码后解码则不变,先解码后编码也不变。
对于一个字符串数组,可以这样编码,将每个字符串里的特殊符号'$'
重复两次,然后再用" $ "
拼接起来。解码的时候反过来操作即可。代码如下:
class Codec {
public:
// Encodes a list of strings to a single string.
string encode(vector<string>& strs) {
string res;
for (auto& s : strs) {
for (char ch : s) {
if (ch == '$') res += '$';
res += ch;
}
res += " $ ";
}
return res;
}
// Decodes a single string to a list of strings.
vector<string> decode(string s) {
vector<string> res;
for (int i = 0, j = 0; i < s.size(); i++)
if (s.substr(i, 3) == " $ ") {
res.push_back(s.substr(j, i - j));
i += 2;
j = i + 1;
}
for (auto& s : res) {
string t;
for (int i = 0; i < s.size(); i++)
if (s[i] != '$') t += s[i];
else {
int j = i;
while (j < s.size() && s[j] == '$') j++;
t += string((j - i) / 2, '$');
i = j - 1;
}
s = t;
}
return res;
}
};
编码和解码时空复杂度都是输入所含的字符个数。