1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?LeetCode刷題實(shí)戰(zhàn)604:迭代壓縮字符串

        共 2206字,需瀏覽 5分鐘

         ·

        2022-05-15 11:30

        算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

        今天和大家聊的問題叫做?迭代壓縮字符串,我們先來看題面:
        https://leetcode.cn/problems/design-compressed-string-iterator/

        對(duì)于一個(gè)壓縮字符串,設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu),它支持如下兩種操作:next 和 hasNext。
        給定的壓縮字符串格式為:每個(gè)字母后面緊跟一個(gè)正整數(shù),這個(gè)整數(shù)表示該字母在解壓后的字符串里連續(xù)出現(xiàn)的次數(shù)。
        next() - 如果壓縮字符串仍然有字母未被解壓,則返回下一個(gè)字母,否則返回一個(gè)空格。
        hasNext() - 判斷是否還有字母仍然沒被解壓。

        注意:
        請(qǐng)記得將你的類在 StringIterator 中 初始化 ,因?yàn)殪o態(tài)變量或類變量在多組測(cè)試數(shù)據(jù)中不會(huì)被自動(dòng)清空。更多細(xì)節(jié)請(qǐng)?jiān)L問 這里 。

        示例:
        StringIterator iterator = new StringIterator(“L1e2t1C1o1d1e1”);
        iterator.next(); //?返回 ‘L’
        iterator.next(); //?返回 ‘e’
        iterator.next(); //?返回 ‘e’
        iterator.next(); //?返回 ‘t’
        iterator.next(); //?返回 ‘C’
        iterator.next(); //?返回 ‘o’
        iterator.next(); //?返回 ‘d’
        iterator.hasNext(); //?返回 true
        iterator.next(); //?返回 ‘e’
        iterator.hasNext(); //?返回 false
        iterator.next(); //?返回 ’ ’


        解題

        https://blog.csdn.net/qq_29051413/article/details/108679703


        ??定義變量 ch 表示當(dāng)前字符,num 表示當(dāng)前字符剩余數(shù)量,ptr 遍歷壓縮字符串的指針。

        ??ch 和 num 都通過遍歷壓縮字符串獲??;

        ??1、hasNext: 如果 num 為 0,且 ptr 已經(jīng)跑到邊界外了,于是沒有下一個(gè)字符了,返回 false;

        ??2、next:

        ??2.1 先調(diào)用一次 hasNext,如果沒有下一個(gè)了,返回 ’ ';

        ??2.2 如果有下一個(gè),則判斷 num 是否為 0,如果不為 0,則 num 減一 并返回 ch;

        ??2.3 如果有下一個(gè),但 num == 0,說明得繼續(xù)遍歷壓縮字符串,獲取下一個(gè)字符和數(shù)量:

        ??獲取下一個(gè)字符和數(shù)量的流程:

        ??1、ptr 所在索引即下一個(gè)字符的索引,ch = str.charAt(ptr);

        ??2、ptr = ptr+1 為新字符數(shù)量字符串的開頭,num = num * 10 + res.charAt(ptr) - ‘0’;

        ??3、繼續(xù) ptr++,直到遇到的字符不是數(shù)字位置,此時(shí) ptr 所在的索引是下一個(gè)字符的位置或者超出邊界。

        class?StringIterator?{

        ????private?String res; // 壓縮的字符串;
        ????private?char?ch = ' '; // 當(dāng)前字符
        ????private?int?num = 0; // 當(dāng)前字符的剩余數(shù)量
        ????private?int?ptr = 0;

        ????public?StringIterator(String s)?{
        ????????res = s;
        ????}

        ????public?char?next()?{
        ????????// 沒有下一個(gè)字符了
        ????????if?(!hasNext()) return?' ';
        ????????// 當(dāng)前字符數(shù)量為 0,但是還有下一個(gè)字符
        ????????if?(num == 0) {
        ????????????ch = res.charAt(ptr++); // ch 更新為新的字符,++放在變量后面,屬于先用后加
        ????????????// 統(tǒng)計(jì)新的字符后面的數(shù)字
        ????????????while?(ptr < res.length() && Character.isDigit(res.charAt(ptr))) {
        ????????????????// res.charAt(ptr++) - '0' 等效于字符轉(zhuǎn)數(shù)字
        ????????????????num = num * 10?+ res.charAt(ptr++) - '0';
        ????????????}
        ????????}
        ????????num--; // 返回一個(gè),數(shù)量減一
        ????????return?ch;
        ????}

        ????public?boolean?hasNext()?{
        ????????return?ptr != res.length() || num != 0;
        ????}
        }


        上期推文:
        LeetCode1-600題匯總,希望對(duì)你有點(diǎn)幫助!
        LeetCode刷題實(shí)戰(zhàn)601:體育館的人流量
        LeetCode刷題實(shí)戰(zhàn)602:好友申請(qǐng) II :誰(shuí)有最多的好友
        LeetCode刷題實(shí)戰(zhàn)603:連續(xù)空余座位

        瀏覽 21
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国际精品久久久 | 久久精品女人毛片水多 | 欧美在线不卡 | 欧美性厨房| 生活黄色一级片 | 欧美日韩国产传媒 | 久久久久久国产精品视频 | 九七伦理97伦理手机版最新章节 | 亚洲无码久久久 | 久久永久免费视频 |