def roman_to_int(s):
vals={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
r=0
for i in range(len(s)):
if i+1<len(s) and vals[s[i]]<vals[s[i+1]]: r-=vals[s[i]]
else: r+=vals[s[i]]
return r
public int romanToInt(String s){
Map<Character,Integer> v=new HashMap<>();
v.put('I',1);v.put('V',5);v.put('X',10);v.put('L',50);v.put('C',100);v.put('D',500);v.put('M',1000);
int r=0;
for(int i=0;i<s.length();i++){
if(i+1<s.length()&&v.get(s.charAt(i))<v.get(s.charAt(i+1))) r-=v.get(s.charAt(i));
else r+=v.get(s.charAt(i));
} return r;
}
Python dict literal concise. Java needs multiple put() calls.
def roman_to_int(s):
vals={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
r=0
for i in range(len(s)):
if i+1<len(s) and vals[s[i]]<vals[s[i+1]]: r-=vals[s[i]]
else: r+=vals[s[i]]
return r
public int romanToInt(String s){
Map<Character,Integer> v=new HashMap<>();
v.put('I',1);v.put('V',5);v.put('X',10);v.put('L',50);v.put('C',100);v.put('D',500);v.put('M',1000);
int r=0;
for(int i=0;i<s.length();i++){
if(i+1<s.length()&&v.get(s.charAt(i))<v.get(s.charAt(i+1))) r-=v.get(s.charAt(i));
else r+=v.get(s.charAt(i));
} return r;
}
1. Map symbols to values 2. Subtract if smaller before larger