思路:
我的想法是使用哈希表,然后从右往左遍历字符串,先按两个找,找不到再按一个找。
#include<iostream>
#include<unordered_map>
#include<string>
using namespace std;
class Solution {
public:
int romanToInt(string s) {
unordered_map<string, int> m = { { "I", 1 },{ "IV", 4 },{ "IX", 9 },{ "V", 5 },{ "X", 10 },{ "XL", 40 },{ "XC", 90 },{ "L", 50 },{ "C", 100 },{ "CD", 400 },{ "CM", 900 },{ "D", 500 },{ "M", 1000 } };
//从右往左,先按两个找,找不到再按一个找
int r = 0;
for (int i = 0; i < s.size();) {
string two = s.substr(i, 2);
string one = s.substr(i, 1);
if (m[two])
{
r += m[two];
i += 2;
}
else
{
r += m[one];
i++;
}
}
return r;
}
};