题目
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:
- If the character read is a letter, that letter is written onto the tape.
- If the character read is a digit (say
d), the entire current tape is repeatedly writtend-1more 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.
Example 1:
Input: S = "leet2code3", K = 10Output: "o"Explanation:The decoded string is "leetleetcodeleetleetcodeleetleetcode".The 10th letter in the string is "o".
Example 2:
Input: S = "ha22", K = 5Output: "h"Explanation:The decoded string is "hahahaha". The 5th letter is "h".
Example 3:
Input: S = "a2345678999999999999999", K = 1Output: "a"Explanation:The decoded string is "a" repeated 8301530446056247680 times. The 1st letter is "a".
Constraints:
2 <= S.length <= 100Swill only contain lowercase letters and digits2through9.Sstarts with a letter.1 <= K <= 10^9- It’s guaranteed that
Kis less than or equal to the length of the decoded string. - The decoded string is guaranteed to have less than
2^63letters.
题意
将给定字符串按照指定规则展开后,取指定位置的字符。
思路
参考[LeetCode] 880. Decoded String at Index 在位置坐标处解码字符串。
代码实现
Java
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 "";}}
