**Description: **

https://leetcode.com/problems/roman-to-integer/#/description

**Boundary:**

s.size() = 0

**Algorithm:**

Use unordered_map m<char, int> to construct the correspondence between character and number like:

character | numerical value |

I | 1 |

V | 5 |

X | 10 |

L | 50 |

C | 100 |

D | 500 |

M | 1000 |

Then check the string s one by one

if m[s[i]] < m[s[i+1]] result -= m[s[i]]

else result += m[s[i]]

**Code:**

class Solution {

public:

int romanToInt(string s) {

if (s.size() == 0) return 0;

m[‘I’] = 1;

m[‘V’] = 5;

m[‘X’] = 10;

m[‘L’] = 50;

m[‘C’] = 100;

m[‘D’] = 500;

m[‘M’] = 1000;

int result = 0;

for (int i = 0; i < s.size() – 1; i++)

{

if (m[s[i]] < m[s[i + 1]])

result -= m[s[i]];

else

result += m[s[i]];

}

result += m[s[s.size() – 1]];

return result;

}

private:

unordered_map <char, int> m;

};

**Tips:**

Beats 85% , however

If I initialize m before considering boundary. It will be much slower (only beats 15%)

class Solution {

public:

int romanToInt(string s) {

**m[‘I’] = 1;
m[‘V’] = 5;
m[‘X’] = 10;
m[‘L’] = 50;
m[‘C’] = 100;
m[‘D’] = 500;
m[‘M’] = 1000;**

if (s.size() == 0) return 0;

int result = 0;

for (int i = 0; i < s.size() – 1; i++)

{

if (m[s[i]] < m[s[i + 1]])

result -= m[s[i]];

else

result += m[s[i]];

}

result += m[s[s.size() – 1]];

return result;

}

private:

unordered_map <char, int> m;

};