zoukankan      html  css  js  c++  java
  • Encode and Decode Strings -- LeetCode

    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.

    思路:每个字符串之前添加它的长度和一个%字符。

     1 class Codec {
     2 public:
     3 
     4     // Encodes a list of strings to a single string.
     5     string encode(vector<string>& strs) {
     6         string res;
     7         for (int i = 0; i < strs.size(); i++)
     8             res += std::to_string(strs[i].size()) + "%" + strs[i];
     9         return res;
    10     }
    11 
    12     // Decodes a single string to a list of strings.
    13     vector<string> decode(string s) {
    14         vector<string> res;
    15         int curInd = 0;
    16         int mark = s.find("%");
    17         while (mark != std::string::npos) {
    18             int len = std::stoi(s.substr(curInd, mark - curInd));
    19             if (len) res.push_back(s.substr(mark + 1, len));
    20             //in case it is an empty string
    21             else res.push_back("");
    22             curInd = mark + len + 1;
    23             mark = s.find("%", curInd);
    24         }
    25         return res;
    26     }
    27 };
    28 
    29 // Your Codec object will be instantiated and called as such:
    30 // Codec codec;
    31 // codec.decode(codec.encode(strs));
  • 相关阅读:
    单链表的基本操作(查找,插入,删除)
    线性表的基本操作(插入,删除,查找)
    双人五子棋对战(需要EasyX图像库)
    2016ACM竞赛训练暑期课期末考试 a题
    百练_1664 放苹果
    百练_4120 硬币(DP)
    PAT_1046 划拳
    PAT_1026 程序运行时间
    学Android开发 这19个开发工具助你顺风顺水
    JAVA利用axis2发布webservice
  • 原文地址:https://www.cnblogs.com/fenshen371/p/5814820.html
Copyright © 2011-2022 走看看