心想用python里的dist会很简单,于是找了c++里面有没有类似的东西,找到了map,于是借此学习了一下c++里面的map的操作。find()返回迭代器。
map<string,int> cmap;
cmap["op1"] = 1;
cmap["op2"] = 2;
string str = "samy";
cmap.insert(make_pair(str,3));
// for(map<string,int>::iterator ite = cmap.begin(); ite!=cmap.end();++ite)
// {
// cout<<ite->first<<" "<<ite->second<<endl;
// }
//cout<<cmap.count("Annaa")<<endl;
map<string,int>::iterator key = cmap.find("Anna");
if(key!=cmap.end())
{
cout<<key->second<<endl;
}
代码:
class Solution {
public:
int romanToInt(string s) {
map<char, int> singleTable;
map<string, int> doubleTable;
singleTable.insert(pair<char, int>('I', 1));
singleTable.insert(pair<char, int>('V', 5));
singleTable.insert(pair<char, int>('X', 10));
singleTable.insert(pair<char, int>('L', 50));
singleTable.insert(pair<char, int>('C', 100));
singleTable.insert(pair<char, int>('D', 500));
singleTable.insert(pair<char, int>('M', 1000));
doubleTable.insert(pair<string, int>("IV", 4));
doubleTable.insert(pair<string, int>("IX", 9));
doubleTable.insert(pair<string, int>("XL", 40));
doubleTable.insert(pair<string, int>("XC", 90));
doubleTable.insert(pair<string, int>("CD", 400));
doubleTable.insert(pair<string, int>("CM", 900));
int i = 0;
int n = 0;
while (i < s.length()-1) {
map<char, int>::iterator key1 = singleTable.find(s[i]);
map<char, int>::iterator key2 = singleTable.find(s[i+1]);
if (key1->second < key2->second) {
string pair = "";
pair += s[i];
pair += s[i + 1];
map<string, int>::iterator key3 = doubleTable.find(pair);
n += key3->second;
i += 2;
}
else {
n += key1->second;
i++;
}
}
if (i == s.length() - 1) {
map<char, int>::iterator key4 = singleTable.find(s[i]);
n += key4->second;
}
return n;
}
};
虽然效率不高。但是提交一次就accept。
哇看到一个也是用map的更好的解法,我一开始也想到过,只是不知道那个快,看这个代码量写起来比我的少。放到leetcode里运行了一下,果然快好多!!直接击败60%选手。原来map的查找不一定要用迭代器???
class Solution {
public:
int romanToInt(string s) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int result=0;
map<char,int> roman;
roman['I']=1;
roman['V']=5;
roman['X']=10;
roman['L']=50;
roman['C']=100;
roman['D']=500;
roman['M']=1000;
for(int i=s.length()-1;i>=0;i--)
{
if(i==s.length()-1)
{
result=roman[s[i]];
continue;
}
if(roman[s[i]] >= roman[s[i+1]])
result+=roman[s[i]];
else
result-=roman[s[i]];
}
return result;
}
};