罗马数字转换为整数,如果输入的罗马数字无效,返回-1?(非正则表达式检查)



所以我在这里有这样的代码,它将匹配的整数返回给输入的罗马数字,并使用正则表达式检查输入的有效性,如果它是一个无效的罗马数字(如"VVIV";或";IIII";,返回-1。

def ValidationOfRomanNumerals(string):
import re
boolean = bool(re.search(r"^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$",string))
return boolean

def romanToInt(s):
roman = {"I" : 1, "V" : 5, "X" : 10, "L" : 50, "C" : 100, "D" : 500, "M" : 1000 }

res = 0
if not ValidationOfRomanNumerals(s):
return -1

for i in range(len(s)):
if i + 1 < len(s) and roman[s[i]] < roman[s[i + 1]]:
res -= roman[s[i]]
else:
res += roman[s[i]]
return res

我的问题是,有没有一种方法可以在不使用regex的情况下检查无效的Roman并返回-1?像算法一样?

如果不希望正则表达式进行检查,可以使用一个简单的If条件来检查它是否有效。像这样:

if s[i] not in roman or i + 1 < len(s) and s[i+1] not in roman:
return -1

如果字符不在上面定义的罗马键中,它将返回-1

完整代码:

def romanToInt(s):
roman = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
res = 0
for i in range(len(s)):
if s[i] not in roman or i + 1 < len(s) and s[i+1] not in roman:
return -1

if i + 1 < len(s) and roman[s[i]] < roman[s[i + 1]]:
res -= roman[s[i]]
else:
res += roman[s[i]]
return res

最新更新