知识点哈希表
使用情境:如何在一个无序的线性表中查找一个数据元素? 一般情况下我们就用某一种映射算法把这些数据元素存到map中,然后再根据映射算法快速把元素找出来 主要有三种映射算法
(1)除留取余法
取关键字被某个不大于哈希表长m的数p除后所得余数为哈希地址。即:f(key)=key % p, p≤m;
(2)直接定址法
直接定址法是指取关键字或关键字的某个线性函数值为哈希地址。即: f(key)=key 或者 f(key)=a*key+b、
(3)数字分析法
假设关键字是以为基的数(如以10为基的十进制数),并且哈希表中可能出现的关键字都是事先知道的,则可以选取关键字的若干位数组成哈希表。
代码分析
这道题主要就用数字分析法, 首先创建了一个哈希表和题目中说好的罗马数字一一对应了
const map = {
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
};
然后先判断两两字母能不能对应,对应了就相加,不能对应再去对应一个字母的
let ans = 0;
//在这里不加i的值因为不能确定加1还是加2
for(i=0; i< s.length;){
if(i+1 < s.length && map[s.substring(i,i+2)]){
//map用[] substring是截取数组的切片
ans += map[s.substring(i, i+2)];
i += 2;
}
else{
ans += map[s.substring(i,i+1)];
i++;
}
}
return ans