880 索引處的解碼字串

2021-09-18 08:19:54 字數 1593 閱讀 1864

給定乙個編碼字串s。為了找出解碼字串並將其寫入磁帶,從編碼字串中每次讀取乙個字元,並採取以下步驟:

現在,對於給定的編碼字串s和索引k,查詢並返回解碼字串中的第k個字母。

示例 1:

輸入:s = "leet2code3", k = 10輸出:"o"解釋:解碼後的字串為 "leetleetcodeleetleetcodeleetleetcode"。

字串中的第 10 個字母是 "o"。

示例 2:

輸入:s = "ha22", k = 5輸出:"h"解釋:解碼後的字串為 "hahahaha"。第 5 個字母是 "h"。
示例 3:

輸入:s = "a2345678999999999999999", k = 1輸出:"a"解釋:解碼後的字串為 "a" 重複 8301530446056247680 次。第 1 個字母是 "a"。

2 <= s.length <= 100s只包含小寫字母與數字29

s以字母開頭。

1 <= k <= 10^9解碼後的字串保證少於2^63個字母。

review:

方法:逆向工作法

思路

我們可以通過逆向工作,跟蹤解碼字串的大小來使用這種洞察力。每當解碼的字串等於某些單詞word重複d次時,我們就可以將k減少到k % (word.length)

演算法

首先,找出解碼字串的長度。之後,我們將逆向工作,跟蹤size:解析符號s[0], s[1], ..., s[i]後解碼字串的長度。

如果我們看到乙個數字s [i],則表示在解析s [0],s [1],...,s [i-1]之後解碼字串的大小將是size / integer(s[i])。 否則,將是size - 1

code:

class solution  else 

if (len >= k)

}// 倒序

for (int i = rec; i > -1; i--) else if(chars[i] < 64)else

}return "";

}}

880 索引處的解碼字串

給定乙個編碼字串s。為了找出解碼字串並將其寫入磁帶,從編碼字串中每次讀取乙個字元,並採取以下步驟 現在,對於給定的編碼字串s和索引k,查詢並返回解碼字串中的第k個字母。示例 1 輸入 s leet2code3 k 10輸出 o 解釋 解碼後的字串為 leetleetcodeleetleetcodel...

880 索引處的解碼字串

給定乙個編碼字串s。為了找出解碼字串並將其寫入磁帶,從編碼字串中每次讀取乙個字元,並採取以下步驟 現在,對於給定的編碼字串s和索引k,查詢並返回解碼字串中的第k個字母。示例1 輸入 s leet2code3 k 10 輸出 o 解釋 解碼後的字串為 leetleetcodeleetleetcodel...

880 索引處的解碼字串

給定乙個編碼字串 s。為了找出解碼字串並將其寫入磁帶,從編碼字串中每次讀取乙個字元,並採取以下步驟 如果所讀的字元是字母,則將該字母寫在磁帶上。如果所讀的字元是數字 例如 d 則整個當前磁帶總共會被重複寫 d 1 次。現在,對於給定的編碼字串 s 和索引 k,查詢並返回解碼字串中的第 k 個字母。示...