我想将所有子字符串存储在unordered_map中。我正在考虑使用substr
stl的功能,但最坏的情况是时间复杂度为O(n),当我打算在循环内对字符串的所有索引使用它时,它会给我O(n ^ 2)。
我们可以使用指针或其他方法在O(n)中做得更好吗,以便以后可以访问子字符串。
答案 0 :(得分:1)
如果您不想将子字符串复制到地图中,则可以使用std::string_view
存储子字符串的视图。这会花费一个指针和一个长度,因此它会尽可能地高效。
您可以构建所有子字符串的向量,例如
int main()
{
std::string word = "word";
auto size = word.size();
std::vector<std::string_view> parts;
parts.reserve(size * (size + 1)/2); // reserve space for all the sub strings
for(size_t i = 0; i < size; ++i)
for(size_t j = i; j < size; ++j)
parts.emplace_back(word.data() + i, j - i + 1);
}