2016年10月3日星期一

Royal Name

1. 题意:

给你一个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;  
   }  

没有评论:

发表评论