成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

[Leetcode] Encode and Decode Strings 字符串編解碼

gself / 3396人閱讀

摘要:記錄長(zhǎng)度法復(fù)雜度時(shí)間空間思路本題難點(diǎn)在于如何在合并后的字符串中,區(qū)分出原來(lái)的每一個(gè)子串。這里我采取的編碼方式,是將每個(gè)子串的長(zhǎng)度先賦在前面,然后用一個(gè)隔開(kāi)長(zhǎng)度和子串本身。這樣我們先讀出長(zhǎng)度,就知道該讀取多少個(gè)字符作為子串了。

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 strs) { // ... your code return encoded_string; }
Machine 2 (receiver) has the function:
vector decode(string s) { //... your code return strs; }

So Machine 1 does:
string encoded_string = encode(strs);
and Machine 2 does:
vector 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.

記錄長(zhǎng)度法 復(fù)雜度

時(shí)間 O(N) 空間 O(1)

思路

本題難點(diǎn)在于如何在合并后的字符串中,區(qū)分出原來(lái)的每一個(gè)子串。這里我采取的編碼方式,是將每個(gè)子串的長(zhǎng)度先賦在前面,然后用一個(gè)#隔開(kāi)長(zhǎng)度和子串本身。這樣我們先讀出長(zhǎng)度,就知道該讀取多少個(gè)字符作為子串了。

注意

為了簡(jiǎn)化代碼,這里使用了indexOfsubstring這兩個(gè)屬于String的API,實(shí)際上復(fù)雜度和遍歷是一樣的。

代碼
public class Codec {

    // Encodes a list of strings to a single string.
    public String encode(List strs) {
        StringBuilder output = new StringBuilder();
        for(String str : strs){
            // 對(duì)于每個(gè)子串,先把其長(zhǎng)度放在前面,用#隔開(kāi)
            output.append(String.valueOf(str.length())+"#");
            // 再把子串本身放在后面
            output.append(str);
        }
        return output.toString();
    }

    // Decodes a single string to a list of strings.
    public List decode(String s) {
        List res = new LinkedList();
        int start = 0;
        while(start < s.length()){
            // 找到從start開(kāi)始的第一個(gè)#,這個(gè)#前面是長(zhǎng)度
            int idx = s.indexOf("#", start);
            int size = Integer.parseInt(s.substring(start, idx));
            // 根據(jù)這個(gè)長(zhǎng)度截取子串
            res.add(s.substring(idx + 1, idx + size + 1));
            // 更新start為子串后面一個(gè)位置
            start = idx + size + 1;
        }
        return res;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64585.html

相關(guān)文章

  • Python2.x 字符碼終極指南

    摘要:值得注意的是,有的編碼方案不一定能表示某些信息,這時(shí)編碼就會(huì)失敗,比如就不能用來(lái)表示中文。數(shù)組的每一項(xiàng)是一個(gè)字節(jié),用來(lái)表示。所以對(duì)于字符串來(lái)說(shuō),其長(zhǎng)度等于編碼后字節(jié)的長(zhǎng)度。所以,讓來(lái)編碼解碼中文,就超出了其能力范圍。 在人機(jī)交互之字符編碼 一文中對(duì)字符編碼進(jìn)行了詳細(xì)的討論,并通過(guò)一些簡(jiǎn)單的小程序驗(yàn)證了我們對(duì)于字符編碼的認(rèn)識(shí)。但僅了解這篇文章的內(nèi)容,并不能幫我們?cè)谌粘>幊讨卸氵^(guò)一些字符編...

    Amio 評(píng)論0 收藏0
  • Python “黑魔法” 之 Encoding & Decoding

    摘要:我可以明確告訴你這不是,但它可以用解釋器運(yùn)行。這種黑魔法,還要從說(shuō)起。提案者設(shè)想使用一種特殊的文件首注釋?zhuān)糜谥付ùa的編碼。暴露了一個(gè)函數(shù),用于注冊(cè)自定義編碼。所謂的黑魔法其實(shí)并不神秘,照貓畫(huà)虎定義好相應(yīng)的接口即可。 首發(fā)于我的博客,轉(zhuǎn)載請(qǐng)注明出處 寫(xiě)在前面 本文為科普文 本文中的例子在 Ubuntu 14.04 / Python 2.7.11 下運(yùn)行成功,Python 3+ 的接...

    鄒強(qiáng) 評(píng)論0 收藏0
  • 字符碼問(wèn)題記錄

    摘要:需求問(wèn)題需要對(duì)序列化以后的對(duì)象中的在中進(jìn)行存取由于聲稱(chēng)只支持作為暴露出來(lái)的最基本的數(shù)據(jù)類(lèi)型形式的存取所以需要在存取前后將與互相轉(zhuǎn)換發(fā)現(xiàn)從出來(lái)的跟之前的不一樣即使強(qiáng)制指定了一致的編碼解碼方式結(jié)果仍不符合預(yù)期猜測(cè)嘗試懷疑是系統(tǒng)的默認(rèn)編碼方式與解 需求&問(wèn)題 需要對(duì)序列化以后的對(duì)象 (java中的byte[]) 在redis中進(jìn)行存取由于redis聲稱(chēng)只支持String(作為redis暴露出...

    doodlewind 評(píng)論0 收藏0
  • 關(guān)于python的解碼(decode, encode)

    摘要:,,等屬于不同的字符集,轉(zhuǎn)換編碼就是在它們中的任意兩者間進(jìn)行。一般個(gè)人用的電腦上控制臺(tái)基本上都是編碼的,但運(yùn)維的機(jī)器上基本全是,中文的時(shí)候就會(huì)有酸爽的問(wèn)題。 總結(jié)總結(jié),本文僅適用于python2.x 默認(rèn)編碼與開(kāi)頭聲明 首先是開(kāi)頭的地方聲明編碼 # coding: utf8 這個(gè)東西的用處是聲明文件編碼為utf8(要寫(xiě)在前兩行內(nèi)),不然文件里如果有中文,比如 a = 美麗 b = u美...

    shusen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

gself

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<