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

一、题目考察的知识点

map

二、题目解答方法的文字分析

依次遍历字符串的每一个字符,并获取当前字符的数值,如果当前字符的数值比前一个字符的数值大则要减去前一个字符的两倍

举一个例子:IV代表4,第一个字符代表1,第二个字符代表5,但是整体代表4,因为前一个字符计算了两次,然后继续累加遍历

三、本题解析所用的编程语言

c++