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 сделать, но там с валидацией порядка цифр в записи будут вопросы. Реализация со словарём префиксов их снимает автоматом.
Начать дискуссию