思路
【转载】
构建一个字典记录所有罗马数字子串,注意长度为2的子串记录的值是(实际值 - 子串内左边罗马数字代表的数值)。
这样一来,遍历整个 s的时候判断当前位置和前一个位置的两个字符组成的字符串是否在字典内,如果在就记录值,不在就说明当前位置不存在小数字在前面的情况,直接记录当前位置字符对应值。
举个例子,遍历经过 IV 的时候先记录 I 的对应值 1 再往前移动一步记录 IV 的值 3,加起来正好是 IV 的真实值 4
作者:QQqun902025048
链接:https://leetcode-cn.com/problems/two-sum/solution/2-xing-python-on-by-knifezhu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码实现
class Solution {
public:
int romanToInt(string s) {
unordered_map<string, int> m = {{"I", 1}, {"IV", 3}, {"IX", 8}, {"V", 5}, {"X", 10}, {"XL", 30}, {"XC", 80}, {"L", 50}, {"C", 100}, {"CD", 300}, {"CM", 800}, {"D", 500}, {"M", 1000}};
int r = m[s.substr(0,1)];
for(int i = 1;i < s.size();i++){
int two = m[s.substr(i-1,2)];
int one = m[s.substr(i,1)];
r += two? two : one;
}
return r;
}
};