LeetCode 880. 索引處的解碼字串(找規律)
阿新 • • 發佈:2021-01-09
技術標籤:LeetCode
文章目錄
1. 題目
給定一個編碼字串 S。請你找出 解碼字串 並將其寫入磁帶。
解碼時,從編碼字串中 每次讀取一個字元 ,並採取以下步驟:
- 如果所讀的字元是字母,則將該字母寫在磁帶上。
- 如果所讀的字元是數字(例如 d),則整個當前磁帶總共會被重複寫 d-1 次。
現在,對於給定的編碼字串 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 <= 100
S 只包含小寫字母與數字 2 到 9 。
S 以字母開頭。
1 <= K <= 10^9
題目保證 K 小於或等於解碼字串的長度。
解碼後的字串保證少於 2^63 個字母。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/decoded-string-at-index
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
2. 解題
- 暴力模擬的方法不可取,字串會很長,會超時
- 先計算整個目標串的長度 len,到達K長度後,往回反向遍歷
- 對 K 對 len 取 %,K取%後為 0 且 當前位置為 字母時,返回答案
class Solution {
public:
string decodeAtIndex(string S, int K) {
long long count = 0, n = S.size(), i = 0;
for( ; i < n; ++i)
{
if(isalpha(S[i]))
count++;
else
count *= S[i]-'0';
if(count >= K)
break;
}
for( ; i >= 0; --i)
{
K = K%count;
if(K==0 && isalpha(S[i]))
return string(1, S[i]);
if(isalpha(S[i]))
count--;
else
count /= S[i]-'0';
}
return "";
}
};
0 ms 6.3 MB C++
我的CSDN部落格地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!