力扣链接:13.罗马数字转整数
难度:⭐
解题关键词:数组
、map
解题思路:从前往后遍历,先往后多看一位,如果前后两个可以凑成 map 中的元素,那么优先处理,否则一个一个罗马字母去转换,最后加和。
typescript
function romanToInt(s: string): number {
let sum = 0;
const map = new Map([
["I", 1],
["V", 5],
["X", 10],
["L", 50],
["C", 100],
["D", 500],
["M", 1000],
["IV", 4],
["IX", 9],
["XL", 40],
["XC", 90],
["CD", 400],
["CM", 900],
]);
for (let i = 0; i < s.length; i++) {
// 先往后多看一位,如果前后两个可以凑成 map 中的元素,那么优先处理
if (map.has(`${s[i]}${s[i + 1]}`)) {
sum += map.get(`${s[i]}${s[i + 1]}`);
i += 1;
} else if (map.has(s[i])) {
sum += map.get(s[i]);
}
}
return sum;
}