LeetCode 13. Roman to Integer

Приятная задачка выпала в поиске – хоть и easy, а сделать интересно. Какая-то “практическая применимость” в ней видится.

Вроде, там где-то и обратная проблема была – перевод записи арабскими цифрами в запись римскими.

В общем-то, список валидных префиксов там прямо в условии задачи описан, особо выдумывать тут ничего не требуется.

class Solution { private Map<Character, Integer> values = Map.of('I', 1, 'V', 5, 'X', 10, 'L', 50, 'C', 100, 'D', 500, 'M', 1000); private Map<Character, Set<Character>> prefixes = Map.of('I', Set.of('V', 'X'), 'X', Set.of('L', 'C'), 'C', Set.of('D', 'M')); public int romanToInt(String s) { int max = s.length() - 1; int sum = 0; int i = 0; while (i <= max) { char c = s.charAt(i); if (prefixes.containsKey(c) && i < max && prefixes.get(c).contains(s.charAt(i + 1))) { sum += values.get(s.charAt(++i)) - values.get(c); } else { sum += values.get(c); } i++; } return sum; } }

Можно ещё вариант со switch-case сделать, но там с валидацией порядка цифр в записи будут вопросы. Реализация со словарём префиксов их снимает автоматом.

0
Комментарии
-3 комментариев
Раскрывать всегда