# O(n) simple to understand javascript solution with roman rules

• from left to right, check for these 'special' rules first: IV(4), IX(9), XL(40), XC(90), CD(400), CM(900).
if not found, add the current char's value to the solution and go to next char.

``````/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
// 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)
let ans = 0;
for(let i=0; i < s.length; i++){
//check special rules that require lookahead
switch (s[i]+s[i+1]) {
case 'IV': ans+=4; i++; break;
case 'IX': ans+=9; i++; break;
case 'XL': ans+=40; i++; break;
case 'XC': ans+=90; i++; break;
case 'CD': ans+=400; i++; break;
case 'CM': ans+=900; i++; break;
// by default, switch over current ith char
default: switch(s[i]){
case 'I': ans+=1; break;
case 'V': ans+=5; break;
case 'X': ans+=10; break;
case 'L': ans+=50; break;
case 'C': ans+=100; break;
case 'D': ans+=500; break;
case 'M': ans+=1000; break;
}
}
}
return ans;
};
``````

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.