<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?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 :誰有最多的好友
          LeetCode刷題實(shí)戰(zhàn)603:連續(xù)空余座位

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜桃人妻Ⅴ一v二精品视频 | 狠狠狠狠狠狠狠操 | 在线射| 免费操逼视频网站 | 91久久免费视频 |