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