Back to Month
HARD 17 Jun 2026

3614. Process String with Special Operations II

</> Solution

class Solution {
    public char processStr(String s, long k) {

        int n = s.length();
        long[] len = new long[n];

        long cur = 0;

        // Calculate final length after every operation
        for (int i = 0; i < n; i++) {
            char ch = s.charAt(i);

            if (ch >= 'a' && ch <= 'z') {
                cur++;
            } else if (ch == '*') {
                if (cur > 0) cur--;
            } else if (ch == '#') {
                cur = Math.min(cur * 2, (long) 1e15 + 5);
            } else { // '%'
                // length unchanged
            }

            len[i] = cur;
        }

        if (k >= cur) {
            return '.';
        }

        // Work backwards
        for (int i = n - 1; i >= 0; i--) {

            char ch = s.charAt(i);
            long before = (i == 0) ? 0 : len[i - 1];

            if (ch >= 'a' && ch <= 'z') {

                if (k == before) {
                    return ch;
                }

            } else if (ch == '*') {

                // Removed last character.
                // Existing indices stay unchanged.

            } else if (ch == '#') {

                if (before > 0 && k >= before) {
                    k -= before;
                }

            } else { // '%'

                if (before > 0) {
                    k = before - 1 - k;
                }
            }
        }

        return '.';
    }
}

TIME COMPLEXITY

O(n)

SPACE COMPLEXITY

O(n)

TOPICS

String