这是从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,但我认为枚举要快得多。
2)我知道可以使用unordered_map,但我认为枚举要快得多。
您正在将桔子与苹果进行比较。
首先,enum
不是容器。它基本上就像一系列已知常量一样。
当您表示访问时间operator[]
:
无序映射是一个关联容器,其中包含具有唯一键的键值对。搜索,插入和删除元素的平均 恒定时间复杂度。
因为string
它也是恒定时间访问。
1)正在使用带字符串的枚举
否。enum
键基本上就像值的“别名”。请注意,每个字符串都是一个字符序列:
V != "V"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句