题目考察的知识点:哈希

题目解答方法的文字分析:小数在大数的左边,那么就是相减;如果将之前的小数是按加数算,那么需要减2倍的小数。

本题解析所用的编程语言:c++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param cowsRomanNumeral string字符串vector 
     * @return int整型
     */
    int sumOfRomanNumerals(vector<string>& cowsRomanNumeral) {
        // write code here
        unordered_map<char, int> mp;
        mp.insert(pair('I', 1));
        mp.insert(pair('V', 5));
        mp.insert(pair('X', 10));
        mp.insert(pair('L', 50));
        mp.insert(pair('C', 100));
        mp.insert(pair('D', 500));
        mp.insert(pair('M', 1000));
        int ret = 0;
        for (int i = 0; i < cowsRomanNumeral.size(); ++i)
        {
            for (int j = 0; j < cowsRomanNumeral[i].size(); ++j)
            {
                if (j >= 1 && mp[cowsRomanNumeral[i][j - 1]] < mp[cowsRomanNumeral[i][j]])
                {
                    ret -= mp[cowsRomanNumeral[i][j - 1]] * 2;
                }
                ret += mp[cowsRomanNumeral[i][j]];
            }
        }
        return ret;
    }
};