解题思路
哈希表思想
将所有可能的键值对存储在hash表中,先找可能存在的大小为2的字符串键值对存在就获得其值,不然就找大小为1的字符串键值对
时间复杂度O(n)
空间复杂度O(1)
代码
#include <string>
#include <unordered_map>
using namespace std;
class Solution {
public:
int romanToInt(string s) {
int res = 0, sSize = s.size();
unordered_map<string, int> store = {{"I", 1}, {"IV", 4}, {"V", 5}, {"IX", 9}, {"X", 10}, {"XL", 40}, {"L", 50}, {"XC", 90}, {"C", 100}, {"CD", 400}, {"D", 500}, {"CM", 900}, {"M", 1000}};
for(int i = 0; i < sSize; i++){
if(i + 1 < sSize && store.find(s.substr(i, 2)) != store.end()){
res += store[s.substr(i, 2)];
i++;
}else{
res += store[s.substr(i, 1)];
}
}
return res;
}
};