c++ - 是否有替代 std::string 子字符串的方法?

标签 c++ string

给定一个字符串 s = "RADILAMIA" 我想获取所有长度为 4(或其他)的子字符串。

如果 len == 4 则子字符串为:"RADI","ADIL","DILA","ILAM","LAMI","AMIA"。使用 std::string substr 方法似乎很容易做到这一点:

vector<string> allSubstr(string s,int len) {
    vector<string>ans;
    for(int i=0;i<=s.size()-len;i++) {
        ans.push_back(s.substr(i,len));
    }
    return ans;
}

substr 的时间复杂度未指定,但通常与子字符串的长度呈线性关系。

我可以在没有 std::string substr 的情况下执行此操作吗?任何子串和前一个子串只有一个字母不同。有没有更好的方法来降低时间复杂度?

最佳答案

string_view (C++17) 有常数时间 substr :

vector<string_view> allSubstr(const string_view& s, int len) {
    vector<string_view> ans;
    and.reserve(s.size() - len + 1);
    for (int i = 0 ; i <= s.size() - len; ++i) {
        ans.push_back(s.substr(i, len));
    }
    return ans;
}

只需确保 s 比函数的返回值长。

关于c++ - 是否有替代 std::string 子字符串的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41115957/

相关文章:

string - Go 中没有开头、结尾的函数?

C++:将 chrono::high_resolution_clock 转换为 time_t

java - JUnit4 TextUtils.isEmpty() 给出的结果与 String.isEmpty() 不同

c++ - 如何运行 .h 中的函数列表

C++类继承问题

c - 尝试将数据复制到 char 指针值时出现异常

Java String 内部表示

java - 如何打印我的 Java 对象而不得到 "SomeType@2f92e0f4"?

c++ - 网格中的空心方 block

c++ - 重新诠释