An encoded string S
is given. To find and write the decoded string to a tape, the encoded string is read one character at a time and the following steps are taken:html
d
), the entire current tape is repeatedly written d-1
more times in total.Now for some encoded string S
, and an index K
, find and return the K
-th letter (1 indexed) in the decoded string.java
Example 1:git
Input: S = "leet2code3", K = 10 Output: "o" Explanation: The decoded string is "leetleetcodeleetleetcodeleetleetcode". The 10th letter in the string is "o".
Example 2:less
Input: S = "ha22", K = 5 Output: "h" Explanation: The decoded string is "hahahaha". The 5th letter is "h".
Example 3:code
Input: S = "a2345678999999999999999", K = 1 Output: "a" Explanation: The decoded string is "a" repeated 8301530446056247680 times. The 1st letter is "a".
Constraints:htm
2 <= S.length <= 100
S
will only contain lowercase letters and digits 2
through 9
.S
starts with a letter.1 <= K <= 10^9
K
is less than or equal to the length of the decoded string.2^63
letters.將給定字符串按照指定規則展開後,取指定位置的字符。blog
參考[LeetCode] 880. Decoded String at Index 在位置座標處解碼字符串。leetcode
class Solution { public String decodeAtIndex(String S, int K) { long size = 0; int index = 0; while (index < S.length() && size < K) { char c = S.charAt(index); size = Character.isDigit(c) ? size * (c - '0') : size + 1; index++; } while (--index >= 0) { char c = S.charAt(index); if (Character.isDigit(c)) { size /= c - '0'; K = (int)((K - 1) % size + 1); } else { if (K == size) { return S.charAt(index) + ""; } size--; } } return ""; } }