一开始使用Hashtable 来做这个题,提示编译出错,估计其编译的jdk版本在1.8以下:
class Solution {
public static int romanToInt(String s) {
//基本思路:从右向左扫描,每次扫描两位,按对应量转换数值
Map<String, Integer> rules1 = new HashMap<String, Integer>();
rules1.put("I", 1);
rules1.put("V", 5);
rules1.put("X", 10);
rules1.put("L", 50);
rules1.put("C", 100);
rules1.put("D", 500);
rules1.put("M", 1000);
//未考虑s为非罗马数字的情况
if(s.length()==1)return rules1.get(s);
Map<String, Integer> rules2 = new HashMap<String, Integer>();
rules2.put("IV", 4);
rules2.put("IX", 9);
rules2.put("XL", 40);
rules2.put("XC", 90);
rules2.put("CD", 400);
rules2.put("CM", 900);
char[] info = s.toCharArray();
int point1 = info.length - 1;
int point2 = info.length - 2;
int tol_val = 0;
StringBuilder strbu = new StringBuilder();
while(point2 >= 0) {
strbu.append(info[point2]);
strbu.append(info[point1]);
if(rules2.containsKey(strbu.toString())) {
tol_val+=rules2.get(strbu.toString());
point1-=2;
point2-=2;
if(point1<0) return tol_val;
}
else {
tol_val+=rules1.get(String.valueOf(info[point1]));
point1--;
point2--;
}
strbu.delete(0, strbu.length());
}
//strbu.append(info[point1]);
tol_val+=rules1.get(String.valueOf(info[point1]));
/*
* if(rules2.containsKey(strbu.toString())) {
* tol_val+=rules2.get(strbu.toString()); } else {
* tol_val+=rules1.get(String.valueOf(info[point1]));
*/
return tol_val ;
}
}