给定一个字符串 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/