class Solution:
    def titleToNumber(self, s: str) -> int:
        #main idea:
        # 0
        # A  : 26*0+1
        # 01
        # AB : 26^1*1 + 2 
        # 012
        # ABC: 26^2 * 1 + 26^1 * 2 + 3   ==> 26^(size-1-idx) * d[val]
        # step1:  create dictionary,  save A-Z as key to store 1-26 values 
        # time O(len(s) + 26)  space(26)
        d = {}
        for idx, val in enumerate(string.ascii_uppercase):
            d[val] = idx +1
        # step2: initialize res, size  
        res = 0
        size = len(s)
        # step3: loop + math break down
        for i in range(size):
        # note cant' use math.pow(26,x) since this function returns float while ** returns integer
            res += 26**(size-1-i)* d[s[i]]  
        return res     
        

short version, save space

def titleToNumber(self, s):
    res = 0
    for i in s:
        res = res*26 + ord(i)-ord('A')+1
    return res