public int romanToInt(String s) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("M",1000);
map.put("CM",900);
map.put("D",500);
map.put("CD",400);
map.put("C",100);
map.put("XC",90);
map.put("L",50);
map.put("XL",40);
map.put("X",10);
map.put("IX",9);
map.put("V",5);
map.put("IV",4);
map.put("I",1);
int front=0;
int num=0;
int len=s.length();
String cur,curb;//分别存储前后字符
if(len==1){
cur=s.substring(front);
num+=map.get(cur);return num;
}
for(int behind=1;behind<len;behind++){
front=behind-1;
cur=s.substring(front,front+1);// 得到前字符
curb=s.substring(behind,behind+1); //得到后字符
if(map.get(cur)<map.get(curb)) {
String piece= s.substring(front,behind+1);
num+=map.get(piece);
behind++;
if(behind==len-1) {//behind++后还需判断重新开始for循环会不会出界
front=len-1;
cur=s.substring(front);
num+=map.get(cur);
}
}else if(behind==len-1) {
num+=map.get(cur);
num+=map.get(curb);
}else{
num+=map.get(cur);
}
}
return num;
}
上面是未看题解写的代码,逻辑挺简单,只是代码较难阅读。
官方题解以后补上