class Solution:
def romanToInt(self, s: str) -> int:
# 将各个字母表示的数字存入字典中
numeral_map = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}
# 存储罗马字母转成的整数值
result = 0
for i in range(len(s)):
# 判断后一个数是否大于前一个数
if i > 0 and numeral_map[s[i]] > numeral_map[s[i-1]]:
# 为什么要*2?因为先执行的else语句,前一个数会加上后一个数。“MCMXCIV”为例:
# 第一步:i = 0, 执行else: result = 1000
# 第二步:i = 1, C<M, 执行else:result = 1000+100
# 第三步:i = 2, M>C, 执行if: result = 1000+100 + 1000-2*100 = 1900,知道为什么*2了吧!
result += numeral_map[s[i]] - 2*numeral_map[s[i-1]]
else:
result += numeral_map[s[i]]
return result