13. 罗马数字转整数 - 力扣(LeetCode)

根据前后字母代表数值大小,确定是加上还是减去该值(罗马数字的辨识规则)

把字母映射成一个数字:使用哈希表 "unordered_map"

然后从前往后枚举每一个字符,比较大小,确定加上还是减去这个值

class Solution {
public:
    int romanToInt(string s) {
        //开一个哈希表,把字母映射成数字
        unordered_map<char, int> hash;
        hash['I'] = 1, hash['V'] = 5;
        hash['X'] = 10, hash['L'] = 50;
        hash['C'] = 100, hash['D'] = 500;
        hash['M'] = 1000;
        int res = 0;
        for(int i = 0; i<s.size(); i++){
            if(i+1<s.size() && hash[s[i]]<hash[s[i+1]])
                res -= hash[s[i]];
            else 
                res += hash[s[i]];
        }
        return res;
    }
};

主要就是哈希表的熟练掌握,根据题意了解罗马数字规则