给你一个list of string,每个string 是由一个firstName 以及一个Roman 数字构成。
eg. Louis X, Louis VIII
Roman数字是1-50 I, V, X, L
返回sorted list : Louis VIII, Louis X
2.算法:
这个题是一个sort 题。 要用一个Comparator实例
public void sortedRoyalName(String[] names){
Arrays.sort(names, (a,b)->{
String[] name1 = a.split("//s");
String[] name2 = b.split("//s");
if(name1[0].equals(name2[0])){
return Integer.comare(romanToInt(name1[1]),romanToInt(name1[1]));
}
return name1[0].compareTo(name2[0]);
});
}
public int romanToInt(String s) {
int ans = 0;
HashMap<String,Integer> RomanToIntMap = new HashMap<>();
RomanToIntMap.put("I",1);
RomanToIntMap.put("V",5);
RomanToIntMap.put("X",10);
RomanToIntMap.put("L",50);
RomanToIntMap.put("C",100);
RomanToIntMap.put("C",100);
RomanToIntMap.put("D",500);
RomanToIntMap.put("M",1000);
int i = 0;
while(i < s.length()){
if(i!= s.length()-1 && RomanToIntMap.get(s.substring(i,i+1)) < RomanToIntMap.get(s.substring(i+1,i+2))){
ans += RomanToIntMap.get(s.substring(i+1,i+2)) - RomanToIntMap.get(s.substring(i,i+1)) ;
i+=2;
continue;
}
ans += RomanToIntMap.get(s.substring(i,i+1));
i++;
}
return ans;
}
没有评论:
发表评论