Roman numerals are usually written from largest to smallest (left to right).
However, when a smaller numeral appears before a larger one, we subtract it (e.g., IV = 5 - 1 = 4).
To handle this, we iterate through the Roman string:
Normally, we add each numeral’s value.
But if the current numeral is greater than the previous, it means we’ve already added a smaller numeral that should’ve been subtracted, so we adjust using:
value -= 2 * previous.
Complexity
Space Complexity
Time Complexity
Code
public int romanToInt(String romanString) {
// Step 1: Create a lookup array to map Roman characters to their integer values
int[] romanToValue = new int[26]; // Covers A-Z
romanToValue['I' - 'A'] = 1;
romanToValue['V' - 'A'] = 5;
romanToValue['X' - 'A'] = 10;
romanToValue['L' - 'A'] = 50;
romanToValue['C' - 'A'] = 100;
romanToValue['D' - 'A'] = 500;
romanToValue['M' - 'A'] = 1000;
int totalValue = 0; // Final result
int previousValue = -1; // Holds the value of the previous Roman character
// Step 2: Traverse the Roman numeral string
for (int i = 0; i < romanString.length(); ++i) {
int currentValue = romanToValue[romanString.charAt(i) - 'A']; // Get int value of current Roman char
totalValue += currentValue; // Add it by default
// Step 3: If previous character was smaller (like I before V), subtract double of it
if (previousValue != -1 && previousValue < currentValue) {
totalValue -= 2 * previousValue;
}
previousValue = currentValue; // Update for next iteration
}
return totalValue; // Return the final integer value
}