zoukankan      html  css  js  c++  java
  • 0880. Decoded String at Index (M)

    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 "";
        }
    }
    
  • 相关阅读:
    angular6 input节流
    遇到跨域别害怕,我来帮你搞定它
    angular4,6 引入第三方插件的方法
    带有动画的字体
    angular 多端打包
    css 常用布局
    chrome 49 版本 跨越 --args --disable-web-security --user-data-dir
    JavaScript中的document.cookie的使用
    ios/iphone手机请求微信用户头像错位BUG及解决方法
    Safari 前端开发调试 iOS 完美解决方案
  • 原文地址:https://www.cnblogs.com/mapoos/p/14164854.html
Copyright © 2011-2022 走看看