Description
You are given a string s consisting of lowercase English letters and the special characters: '*', '#', and '%'.
You are also given an integer k.
Build a new string result by processing s according to the following rules from left to right:
- If the letter is a lowercase English letter append it to 
result. - A 
'*'removes the last character fromresult, if it exists. - A 
'#'duplicates the currentresultand appends it to itself. - A 
'%'reverses the currentresult. 
Return the kth character of the final string result. If k is out of the bounds of result, return '.'.
Β
Example 1:
Input: s = "a#b%*", k = 1
Output: "a"
Explanation:
i | s[i] | Operation | Current result | 
|---|---|---|---|
| 0 | 'a' | Append 'a' | "a" | 
| 1 | '#' | Duplicate result | "aa" | 
| 2 | 'b' | Append 'b' | "aab" | 
| 3 | '%' | Reverse result | "baa" | 
| 4 | '*' | Remove the last character | "ba" | 
The final result is "ba". The character at index k = 1 is 'a'.
Example 2:
Input: s = "cd%#*#", k = 3
Output: "d"
Explanation:
i | s[i] | Operation | Current result | 
|---|---|---|---|
| 0 | 'c' | Append 'c' | "c" | 
| 1 | 'd' | Append 'd' | "cd" | 
| 2 | '%' | Reverse result | "dc" | 
| 3 | '#' | Duplicate result | "dcdc" | 
| 4 | '*' | Remove the last character | "dcd" | 
| 5 | '#' | Duplicate result | "dcddcd" | 
The final result is "dcddcd". The character at index k = 3 is 'd'.
Example 3:
Input: s = "z*#", k = 0
Output: "."
Explanation:
i | s[i] | Operation | Current result | 
|---|---|---|---|
| 0 | 'z' | Append 'z' | "z" | 
| 1 | '*' | Remove the last character | "" | 
| 2 | '#' | Duplicate the string | "" | 
The final result is "". Since index k = 0 is out of bounds, the output is '.'.
Β
Constraints:
1 <= s.length <= 105sconsists of only lowercase English letters and special characters'*','#', and'%'.0 <= k <= 1015- The length of 
resultafter processingswill not exceed1015. 
Solution
Python3
class Solution:
    def processStr(self, s: str, k: int) -> str:
        l = 0
 
        for x in s:
            if x == "*":
                if l > 0:
                    l -= 1
            elif x == "#":
                l *= 2
            elif x == "%":
                continue
            else:
                l += 1
        
        if k >= l: return '.'
 
        for x in s[::-1]:
            if x == "*":
                l += 1
            elif x == '#':
                l //= 2
                if k >= l:
                    k -= l
            elif x == "%":
                k = l - 1 - k
            else:
                l -= 1
 
                if l == k:
                    return x