# 13. Roman to Integer

## Intuition

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 |
| ---------------- | --------------- |
| $$\text{O}(1)$$  | $$\text{O}(N)$$ |

## Code

```java
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
}

```
