程式語言 - LeetCode - C++ - 3614. Process String with Special Operations II



題目:


解答:

class Solution {
public:
    char processStr(string s, long long k) {
        long long len = 0;

        for (char ch : s) {
            switch (ch) {
            case '*':
                len = max(0LL, len - 1);
                break;
            case '#':
                len <<= 1;
                break;
            case '%':
                break;
            default:
                len += 1;
                break;
            }
        }

        cout << len << endl;
        if (k >= len) {
            return '.';
        }

        for (int i = s.size() - 1; i >= 0; --i) {
            char ch = s[i];

            switch (ch) {
            case '*':
                len += 1;
                break;
            case '#':
                len >>= 1;

                if (k >= len) {
                    k -= len;
                }
                break;
            case '%':
                k = len - 1 - k;
                break;
            default:
                len -= 1;

                if (len == k) {
                    return ch;
                }
                break;
            }
        }

        return '.';
    }
};