Python/Problems

From Omnia
Jump to navigation Jump to search

Roman Numeral to Integer

My favorite solution I found online: [1]

class Solution:
    def romanToInt(self, s: str) -> int:
        translations = {
            "I": 1,
            "V": 5,
            "X": 10,
            "L": 50,
            "C": 100,
            "D": 500,
            "M": 1000
        }
        number = 0
        s = s.replace("IV", "IIII").replace("IX", "VIIII")
        s = s.replace("XL", "XXXX").replace("XC", "LXXXX")
        s = s.replace("CD", "CCCC").replace("CM", "DCCCC")
        for char in s:
            number += translations[char]
        return number

My Solution: [2]

class Solution:
    def romanToInt(self, s: str) -> int:
        i = 0
        t = 0
        slen = len(s)
        roman = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
        rdic = {"IV": 4, "IX": 9, "XL": 40, "XC": 90, "CD": 400, "CM": 900}
        while i < slen:
            c = s[i]
            if i + 1 < slen and c in ("I", "X", "C"):
                cc = c + s[i+1]
                if cc in rdic:
                    t += rdic[cc]
                    i += 2
                    continue
            t += roman[c]
            i += 1
        print(t)
        return t