Это было взято из LeetCode, но в основном с учетом строки, состоящей из нескольких уникальных символов, каждый из которых имеет соответствующее целочисленное значение, мне нужно быстро обработать общее целочисленное значение строки.Я подумал, что перечисления будут полезны, так как вы знаете, что будет составлять ваши строки.
Перечисление - это типы символов, которые могут быть в моей строке (можно видеть, что она ограничена).Если символ с меньшим значением находится перед символом с большим значением, таким как IV, то я вычитаю значение предыдущего символа из следующего за ним.В противном случае вы добавляете.Код - моя попытка, но я не могу заставить перечисления работать с моим алгоритмом ...
std::string s = "III";
int sum = 0;
enum {I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000};
// O(n) iteration.
for (int i = 0; i < s.length(); i++) {
// Must subtract.
if (s[i] < s[i+1]) {
sum += s[i+1] - s[i];
}
// Add.
else {
sum += s[i];
}
}
std::cout << "sum is: " << sum;
Мои вопросы: 1) Возможно ли использование enum со строкой?2) Я знаю, что это возможно сделать с unordered_map, но я думаю, что enums намного быстрее.