function romanToInt(s: string): number {
const tokens = [
["M", 1000],
["CM", 900],
["D", 500],
["CD", 400],
["C", 100],
["XC", 90],
["L", 50],
["XL", 40],
["X", 10],
["IX", 9],
["V", 5],
["IV", 4],
["I", 1]
];
let ans = 0;
for (const [symbol, value] of tokens) {
while (s.startsWith(symbol)) {
ans += value;
s = s.slice(symbol.length);
}
}
return ans;
};
const solve1 = romanToInt;
const solve2 = (s: string): number {
const map = new Map<string, number>([
["I", 1],
["V", 5],
["X", 10],
["L", 50],
["C", 100],
["D", 500],
["M", 1000],
]);
let ans = 0;
for (let i = 0; i < s.length; i++) {
const curr = map.get(s[i])!;
const next = map.get(s[i+1]) ?? 0;
if (curr < next) {
ans += (next - curr);
i++;
}
else {
ans += curr;
}
}
return ans;
};