Encode and Decode Strings
Design an algorithm to encode a list of strings to a string. The encoded string is then sent over the network and is decoded back to the original list of strings.
Machine 1 (sender) has the function:
string encode(vector<string> strs) {
// ... your code
return encoded_string;
}
Machine 2 (receiver) has the function:
vector<string> decode(string s) {
//... your code
return strs;
}
So Machine 1 does:
string encoded_string = encode(strs);
and Machine 2 does:
vector<string> strs2 = decode(encoded_string);
strs2 in Machine 2 should be the same as strs in Machine 1.
Implement the encode and decode methods.
Format: length%{data}
public class Codec {
public String encode(List<String> strs) {
StringBuffer result = new StringBuffer();
if(strs == null || strs.size() == 0)
return result.toString();
for(String str: strs){
result.append(str.length());
result.append("%");
result.append(str);
}
return result.toString();
}
// Decodes a single string to a list of strings.
public List<String> decode(String s) {
List<String> result = new ArrayList();
if(s == null || s.length() == 0)
return result;
int current = 0;
while(true){
if(current == s.length())
break;
StringBuffer sb = new StringBuffer();
while(s.charAt(current) != '%'){
sb.append(s.charAt(current));
current++;
}
int len = Integer.parseInt(sb.toString());
int end = current + 1 + len;
result.add(s.substring(current+1, end));
current = end;
}
return result;
}
}