← Back to DSA Animator
Roman to Integer LC #13 Easy String Parsing · HashMap
Problem

Given a Roman numeral string s, convert it to an integer. Roman numerals use I=1, V=5, X=10, L=50, C=100, D=500, M=1000. When a smaller value precedes a larger one, it is subtracted (e.g. IV=4, IX=9, CM=900).

Example 1
Input: s = "MCMXCIV"
Output: 1994
Explanation: M=1000, CM=900, XC=90, IV=4 → 1994
Example 2
Input: s = "LVIII"
Output: 58
Explanation: L=50, V=5, III=3 → 58
Constraints: 1 ≤ s.length ≤ 15 | s contains only I, V, X, L, C, D, M | 1 ≤ answer ≤ 3999
Try Examples
Custom:
Approach
Scan left → right, comparing each char's value with the next
If cur < next → subtract (subtractive rule e.g. IV, CM). Else → add. Single pass O(n).
Roman String
Value Reference
Comparison & Action
s[i] = cur
?
s[i+1] = nxt
Running Total
0
Variables
i
cur
nxt
action
res
0
Step Logic
Press ▶ Play or Next Step to begin the animation.
🎉
Ready
0 / 0
Select an example above and press Play.
Algorithm
1
Build map: I=1, V=5, X=10, L=50, C=100, D=500, M=1000
2
For each index i: get cur = map[s[i]]
3
Get nxt = map[s[i+1]] or 0 if last char
4
If cur < nxtres -= cur (subtractive: IV, IX, CM…)
5
Else → res += cur (standard addition)
6
Return res after scanning all chars
Time
O(n)
Space
O(1)
Why This Works

Roman numerals subtract when a smaller symbol precedes a larger one (IV, IX, XL, XC, CD, CM). The simple rule: compare cur with nxt. If cur < nxt → subtract; else → add. A single left-to-right pass handles all cases correctly in O(n).