棧-N880-索引處的解碼字符串

題目

  • 概述:給定一個字符串,將其編碼成另一個字符串,編碼規(guī)則:字母不變,數字則將當前已經編碼的字符串重復(數字大小-1)次。給定一個索引,輸出編碼后字符串對應索引的字符

  • 輸入:

    1. 字符串,長度范圍[2, 100],由字母開頭,且僅由小寫英文字母和數字2~9組成
    2. 索引,大小范圍[1, 10^9]

    解碼后的字符串長度不會超過2^63

  • 輸出:編碼后字符串指定索引處的字符

  • 出處:https://leetcode-cn.com/problems/decoded-string-at-index/

思路

  • 遍歷字符串,記錄當前字符串編碼后字符串的長度,并記錄當前編碼后字符串長度到當前字符的映射,如果當前字符是數字,則這次映射的字符與上一次相同
  • 當遍歷到當前字符串的長度大于等于索引時,重新計算索引=(索引-上一次字符串長度)% 上一次字符串長度(索引等于0時應加上上一次字符串長度),重新遍歷字符串直至當前字符串的長度等于索引
  • 根據最終計算的索引從一開始記錄的映射表中取出對應字符

代碼

class Solution {
    public String decodeAtIndex(String S, int K) {    
        char[] sArray = S.toCharArray();
        Map<Long, Character> map = new HashMap<>();
        long ind = K;
        long len, lastLen;
        boolean isFirst = true;
        
        while (true) {
            len = 0L; 
            lastLen = 0L;
            for (int i = 0; ;++i) {
                if (sArray[i] >= 'a' && sArray[i] <= 'z') {
                    ++len;
                    if (isFirst) {
                        map.put(len, sArray[i]);
                    }
                } else {
                    len *= (sArray[i] - '0');
                    if (isFirst) {
                        map.put(len, map.get(lastLen));
                    }
                }
                
                // check len before forward lastLen
                if (len >= ind) {
                    break;
                }
                lastLen = len;
            }
            
            if (len == ind) {
                return "" + map.get(len);
            }
            
            ind = (ind - lastLen) % lastLen;
            if (ind == 0) {
                return "" + map.get(lastLen);
            }
            
            isFirst = false;
        }
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、這節(jié)課你覺得最重要或者印象深刻的三個部分或知識點 1.班長講了心理課的緒論部分,并且引用了一個小故事。 2.老...
    盧晶閱讀 261評論 0 3
  • 總結一下這次辟谷招生: 1.做一件事兒需要耐心 通過辟谷招生,我發(fā)現做一件事兒,需要耐心。一次不成,總結原因反思一...
    夏夜冬日閱讀 218評論 0 1
  • 睡了很久,還是困。是心底那個真我不愿意做假事。哎,這個真的是好難。難得我天天又充滿幻想,又在體驗失敗。雖說,對于你...
    樹莓有點兒酸閱讀 119評論 0 0
  • 日更第9天,已經到了擠牙膏階段,沒什么思路,更不要說靈感。現在才知道靈感也是需要積累的,沒有大量的文章輸入做積累,...
    小小溪孩子王閱讀 181評論 0 3
  • 梅同音美 梅花,盡管它不像水仙花那么高潔,不像玫瑰那么嬌媚,不像牡丹那么富貴,也不像百合那么清麗,但她是那么不...
    0439惠說話的小姑涼閱讀 407評論 0 1