Leetcode 271. Encode and Decode Strings

来源:互联网 发布:求购湖南快乐十分源码 编辑:程序博客网 时间:2024/04/30 14:53

271. Encode and Decode Strings

Total Accepted: 11877 Total Submissions: 43568 Difficulty: Medium

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.

Hide Company Tags
 Google
Hide Tags
 String
Hide Similar Problems
 (E) Count and Say (H) Serialize and Deserialize Binary Tree

思路:

存len+#+item。取的时候头元素一定是数字,指针移动到#取数字读string就可以了。参考这里。

public class Codec { // 12 ms    private final char delimiter = '#';    // Encodes a list of strings to a single string.    public String encode(List<String> strs) {        StringBuilder sb = new StringBuilder();        for(String item : strs){            int len = item.length();            sb.append(len).append(delimiter).append(item);        }        return sb.toString();    }    // Decodes a single string to a list of strings.    public List<String> decode(String s) {        List<String> res = new ArrayList<String>();        if(s == null) return res;         int end = 0, start = 0;        while(end < s.length()){            while(s.charAt(end) != delimiter) end++;            int len = Integer.valueOf(s.substring(start, end));            res.add(s.substring(end + 1, end + 1 + len));            start = end + len + 1;            end = start;        }        return res;    }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.decode(codec.encode(strs));


0 0
原创粉丝点击