python:

        sum=0
        d={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
        for i in range(len(s)-1):
            if d[s[i]]<d[s[i+1]]:
                sum=sum-d.get(s[i])
            else:
                sum+=d.get(s[i])
        sum+=d[s[-1]]
        return sum

tips:

range倒序:range(len-1,-1,-1)#从len-1到0

java:

public int romanToInt(String s) {
       LinkedHashMap<String, Integer> roman = new LinkedHashMap< String,Integer>();		
		roman.put("I", 1);
		roman.put("V", 5);
		roman.put("X", 10);
		roman.put("L", 50);
		roman.put("C", 100);
		roman.put("D", 500);
		roman.put("M", 1000);
		List<String> index_s =new ArrayList<String> (roman.keySet());
		int sum=0;
		int b=0;
		int flag;
		for(int i=s.length()-1;i>=0;i--) {
			flag=0;
			int a=(int)index_s.indexOf(String.valueOf(s.charAt(i)));/*值,索引*/
			if(i-1>=0) {
				b=(int)index_s.indexOf(String.valueOf(s.charAt(i-1)));
				if(a==b+1) {
					sum+=4*Math.pow(10, b/2);
					i-=1;
					flag=1;
				}
				if(a==b+2) {
					sum+=9*Math.pow(10, b/2);
					i-=1;
					flag=1;
				}
			}			
			if(flag==0) {
					int c=roman.get(String.valueOf(s.charAt(i)));
					sum+=c;
				}
				
		}	
		return sum;
    }

tips:

 类似于dict的Map。HashMap(根据key的哈希排序),TreeMap(根据key的值升序),LinkedMap(根据输入顺序)。

初始化:LinkedHashMap<String, Integer> roman = new LinkedHashMap< String,Integer>();        
输入:roman.put("I", 1);

键的set:.keySet()

键对应的值:   .get(key)

 

初始化arrayslist:List<String> index_s =new ArrayList<String> (roman.keySet());

list取索引:   .indexOf(value)

string取索引对应的值:  .charAt(index)

char->string:    String.valueOf(s.charAt(i))