leetcode880.DecodedStringatIndex

题目:输入一个字符串,然后这个字符串中出现数字n的话,就把这个数字的
前面所有字符重复n-1遍,以此类推,然后返回最后生成的字符串的第k位
输入:一个字符串
输出:一个字符串的第k位
思路: 遍历字符串,然后遇见数字 就把之前的字符串重复一波,以此类推,最后返回第k位不过最后导致内存溢出了,很尴尬,说明此路不通

别人思路:因为是求第K位,所以先按照题目要求,找到包含第K位的新字符串的最小长度确定了我们已经足够的长度之后,在往回退,如果是数字,就要除以这个数字, 变成单倍数的字符串,相应的,第K个也要变成单倍数的,最后找到对应的字符,并输出。
   比如,对于一个解码了的字符串,appleappleappleappleappleapple,并且要求的索引K=24的话,那么结果和K=4是一样的。因为单词apple的size=5,重复了6次。所以第K个索引和第K%size个索引是一样的。

class solution{
    public String decodeAtIndex(String S, int K) {
        long index = 0 ;
        int i ;
        for(i=0;index<K;i++){
            if(S.charAt(i)>='a'&&S.charAt(i)<='z'){
                index ++ ;
            }else{
                index = index * (S.charAt(i) - '0') ;
            }
        }
        i -- ;
        while(i >= 0){
            if(S.charAt(i)>='2'&&S.charAt(i)<='9'){
                index = index / (S.charAt(i) - '0') ;
                K = K % Integer.parseInt(index+"") ;
            }else{
                if(K % index == 0){
                    return S.charAt(i)+"" ;
                }
                index -- ;
            }
            i -- ;
        }
        return "" ;
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值