1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public: int romanToInt(string s) { unordered_map<string, int> map{{"I", 1}, {"IV", 4}, {"V", 5}, {"IX", 9}, {"X", 10}, {"XL", 40}, {"L", 50}, {"XC", 90}, {"C", 100}, {"CD", 400}, {"D", 500}, {"CM", 900}, {"M", 1000}}; int size = s.size(); int num = 0;
for (int i = size - 1; i >= 0; --i) { string now(1, s[i]); if (i == 0) { return num + map[now]; } string before(1, s[i - 1]); string sub = before + now; if (map.find(sub) != map.end()) { num += map[sub]; --i; } else { num += map[now]; } } return num; } };
|