c++ - 哪种数据结构和算法适用于此?

标签 c++ string algorithm stl

我有 1000 根绳子。给定一个需要在所有字符串中搜索的模式,并返回所有包含该模式的字符串。

目前我正在使用 vector 来存储原始字符串。搜索模式,如果匹配,则将其添加到新 vector 中,最后返回 vector 。

int main() {
    vector <string> v;
    v.push_back ("maggi");
    v.push_back ("Active Baby Pants Large 9-14 Kg ");
    v.push_back ("Premium Kachi Ghani Pure Mustard Oil ");
    v.push_back ("maggi soup");
    v.push_back ("maggi sauce");
    v.push_back ("Superlite Advanced Jar");
    v.push_back ("Superlite Advanced");
    v.push_back ("Goldlite Advanced"); 
    v.push_back ("Active Losorb Oil Jar"); 

    vector <string> result;

    string str = "Advanced";

    for (unsigned i=0; i<v.size(); ++i)
    {
        size_t found = v[i].find(str);
        if (found!=string::npos)
            result.push_back(v[i]);
    }

    for (unsigned j=0; j<result.size(); ++j)
    {
        cout << result[j] << endl;
    }
    // your code goes here
    return 0;

}

是否有任何最佳方法可以以更低的复杂性和更高的性能实现相同的目标??

最佳答案

我认为适合您应用的容器。

但是,如果您实现自己的 KMP 算法,而不是 std::string::find,那么您可以保证时间复杂度是线性的字符串长度 + 搜索字符串。
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

因此 std::string::find 的复杂度是未指定的。
http://www.cplusplus.com/reference/string/string/find/

编辑:正如此链接所指出的,如果您的字符串长度不大(超过 1000),那么可能使用 std::string::find 就足够了,因为这里不需要制表等。
C++ string::find complexity

关于c++ - 哪种数据结构和算法适用于此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769585/

相关文章:

c++ - 解析复杂的字符串

algorithm - 不清楚为什么这种硬币找零算法有效

c - C 中的队列数据结构

c++ - Eigen 中的稀疏矩阵构造

c# - 如何将 C 函数签名转换为 C# 并在 native DLL 中调用该函数?

c++ - boost::regex, match_results::operator[] - 神秘的 "sub += 2"行

python - 如何在 python 中将\t 视为常规字符串

c++ - SPOJ PRIME1 : TLE

ios - 将文本字段编号除以 100 - swift iOS

algorithm - 找到具有相同权重的最大边数的生成树