public class Codec {
public HashMap<Integer, String> map = new HashMap<>();
// Encodes a list of strings to a single string.
public String encode(List<String> strs) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strs.size(); i++) {
map.put(i, strs.get(i));
sb.append(strs.get(i));
}
return sb.toString();
}
// Decodes a single string to a list of strings.
public List<String> decode(String s) {
List<String> res = new ArrayList<>();
for (int i = 0; i < map.size(); i++) {
res.add(map.get(i));
}
return res;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(strs));
This is a solution where we store the size and delimiters both in our encoded string and then we can read it to get the original string. Here we don't mind the intermediate string format so this solution is totally fine.
public class Codec {
// Encodes a list of strings to a single string.
public String encode(List<String> strs) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strs.size(); i++) {
sb.append(strs.get(i).length()).append('/').append(strs.get(i));
}
return sb.toString();
}
// Decodes a single string to a list of strings.
public List<String> decode(String s) {
List<String> res = new ArrayList<>();
int i = 0;
while (i < s.length()) {
int slash = s.indexOf('/', i);
int size = Integer.valueOf(s.substring(i, slash));
i = slash + size + 1;
res.add(s.substring(slash + 1, i));
}
return res;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.decode(codec.encode(strs));
Using HashMap:
This is a solution where we store the size and delimiters both in our encoded string and then we can read it to get the original string. Here we don't mind the intermediate string format so this solution is totally fine.