zoukankan      html  css  js  c++  java
  • 获取解码字符串指定位置的数值 Decoded String at Index

    2018-10-04 12:53:06

    问题描述:

    问题求解:

    首先本题给出了问题的规模,从Note中我们可以看到解码后的字符串长度甚至可以达到2^63的长度,这个长度已经远远超过整型数的范围,因此如果只是先解码后提取的话无疑是会超时的。

    那么本题还有什么别的思路呢?正常来说如果碰到这种重复循环的问题,首先想到的自然是取余操作,比如hahahaha,K = 5,其实和 (K % 2 = 1)是一样的,因此本题的解法就很明确了,就是每次对K进行取余操作,如果说碰到了K == size的情况,也就是说当前的字符扩展后正好长度为K,那么直接返回这个字符即可(当然首先需要判断是否为字母)。

        public String decodeAtIndex(String S, int K) {
            long size = 0;
            int N = S.length();
            for (int i = 0; i < N; i++) {
                char c = S.charAt(i);
                if (Character.isDigit(c)) size *= (c - '0');
                else size++;
            }
            for(int i = N - 1; i >= 0; i--) {
                char c = S.charAt(i);
                K %= size;
                if (K == 0 && Character.isLetter(c)) return Character.toString(c);
                if (Character.isDigit(c)) size /= (c - '0');
                else size--;
            }
            return null;
        }
    

    2019.04.27

        public String decodeAtIndex(String S, int K) {
            long size = 0;
            char[] chs = S.toCharArray();
            for (int i = 0; i < chs.length; i++) {
                if (chs[i] >= '0' && chs[i] <= '9') size *= (chs[i] - '0');
                else size++;
            }
            for (int i = chs.length - 1; i >= 0; i--) {
                if ((K == 0 || K == size) && !Character.isDigit(chs[i])) return String.valueOf(chs[i]);
                if (chs[i] >= '0' && chs[i] <= '9') {
                    size /= (chs[i] - '0');
                    K %= size;
                }
                else size--;
            }
            return "";
        }
    

      

  • 相关阅读:
    事务
    MySQL删除表的方式
    建立索引的原则
    对表设置引擎
    运算符
    数据库锁简介
    为什么对表设置主键
    php苹果原生apns推送接口
    华为推送
    php操作redis
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/9742033.html
Copyright © 2011-2022 走看看