前言
每天早晨第一件事leetcode,不知道啥时候才能熟练点
题目
解题
1、本题由于会重复字符串,所以可以巧妙的运用取模操作,通过遍历字符串,当遇到字符时,长度加1,数字时相乘。就可以得到最终的解码字符串长度。
2、对原始字符串进行逆序遍历,每次k%size,分三种情况:
- k刚好为0且当前字符为字母,则直接返回
- 当前字符为数字,则说明重复的那一段可以直接跳过,size/=c
- 或则就将size-1
源码
class Solution {
public String decodeAtIndex(String S, int K) {
long size =0;
for(int i=0;i<S.length();++i){
char c=S.charAt(i);
if (Character.isDigit(c)){
size *= (c-'0');
}else{
size+=1;
}
}
for(int i=S.length()-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-=1;
}
}
throw null;
}
}
class Solution:
def decodeAtIndex(self, S: str, K: int) -> str:
size=0
for c in S:
if c.isdigit():
size *= int(c)
else:
size += 1
for c in reversed(S):
K %= size
if K==0 and c.isalpha():
return c
if c.isdigit():
size /= int(c)
else:
size -= 1