880.Decoded String at Index

880.Decoded String at Index

思路
用size表示在i处,字符串进行解码后的长度。
如果有一个解码后的字符串为appleappleappleappleappleapple,且K=24,那么答案相当于在字符串apple中求K = 4的字符。即size=26,K=24的问题可转化为size=5,K=4的问题。
利用这一点可以先找到刚好size>=K的位置,再反向遍历S,不断化简问题,最后求得答案。

代码

class Solution {
public:
    string decodeAtIndex(string S, int K) {
        long size = 0; // 要用long,如果用int会数据溢出
        int i = 0;
        for (i = 0; i < S.size(); i++) {
            if (!isdigit(S[i])) 
                size++;
            else
                size *= S[i] - '0';
        
            if (size >= K)
                break;
        }
        
        if (i == S.size()) // for循环时要注意越界问题
            i = S.size() - 1;
        
        for (int j = i; j >= 0; j--) { // 从后向前
            if (isdigit(S[j])) { // 等价问题转化
                size /= S[j] - '0';
                K %= size;
            }
            else {
                if (size == K || K == 0) // 刚好最后一个字符就是答案
                    return (string)"" + S[j];
                else // 最后一个字符不是答案
                    size--;
            }
        }
        
        
    }
};

你可能感兴趣的:(880.Decoded String at Index)