题目描述:
罗马数字包含以下七种字符:IVXLCDM
问题解析:
【1】通过构建hashmap的键值对的查询关系,可以获得罗马数字与整数之间的关系;
【2】处理特殊的规则:逐个识别罗马字符串s(从左至右),当s[i]>s[i+1](即左边比右边大,如XI),正常规则,则采用加法,如果出现s[i]<s[i+1],表示特殊规则(如IX),需要减去该数值。
具体代码如下:
class Solution{
public:
int romanToInt(string s)
{
unordered_map<char, int> mp; //构建键值对hashmap
mp['I'] = 1;
mp['V'] = 5;
mp['X'] = 10;
mp['L'] = 50;
mp['C'] = 100;
mp['D'] = 500;
mp['M'] = 1000;
int pos =0, neg = 0;
for(int i=0;i<s.size()-1;i++)
{
if(mp[s[i]]<mp[s[i+1]]) //表示特殊规则,采用减法
{
neg -=mp[s[i]];
}
else
{
pos += mp[s[i]];
}
}
pos+=mp[s.back()];
return pos+neg;
}
};