菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
154
0

0880. Decoded String at Index (M)

原创
05/13 14:22
阅读数 98091

Decoded String at Index (M)

题目

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 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.

Example 1:

Input: S = "leet2code3", K = 10
Output: "o"
Explanation: 
The decoded string is "leetleetcodeleetleetcodeleetleetcode".
The 10th letter in the string is "o".

Example 2:

Input: S = "ha22", K = 5
Output: "h"
Explanation: 
The decoded string is "hahahaha".  The 5th letter is "h".

Example 3:

Input: S = "a2345678999999999999999", K = 1
Output: "a"
Explanation: 
The decoded string is "a" repeated 8301530446056247680 times.  The 1st letter is "a".

Constraints:

  • 2 <= S.length <= 100
  • S will only contain lowercase letters and digits 2 through 9.
  • S starts with a letter.
  • 1 <= K <= 10^9
  • It's guaranteed that K is less than or equal to the length of the decoded string.
  • The decoded string is guaranteed to have less than 2^63 letters.

题意

将给定字符串按照指定规则展开后,取指定位置的字符。

思路

参考[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 "";
    }
}

发表评论

0/200
154 点赞
0 评论
收藏
为你推荐 换一批