Encode and Decode Strings

题目地址:
https://leetcode.com/problems/encode-and-decode-strings/#/description

题目:
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.
Note:
  • The string may contain any possible characters out of 256 valid ascii characters. Your algorithm should be generalized enough to work on any possible characters.
  • Do not use class member/global/static variables to store states. Your encode and decode algorithms should be stateless.
  • Do not rely on any library method such as eval or serialize methods. You should implement your own encode/decode algorithm.

解题思路:
这道题就是用自己想的一个方法来存。one,two,three -> 3/one3/two5/three。主要就是先拿slash的index,然后parse出size,然后从slash的index往后找存储的string。

代码:



public String encode(List<String> strs) {
    StringBuilder sb = new StringBuilder();
    for(String str : strs){
        sb.append(str.length()).append('/').append(str);
    }
    return sb.toString();
}



public List<String> decode(String s) {
    List<String> rst = new ArrayList<String>();
    int i = 0;
    while(i <= s.length() - 1){

        // indexOf('/', i) -> from index i, the first position of '/'        int slash = s.indexOf('/', i);
        int size = Integer.valueOf(s.substring(i, slash));
        rst.add(s.substring(slash + 1, slash + size + 1));
        i = slash + size + 1;
    }
    return rst;
}




Comments

Popular Posts