我正在尝试对常见的子字符串问题进行天真的解决方案。为此,我首先找到第一个字符串的所有子字符串并将它们添加到哈希集中。然后,我找到第二个字符串的子字符串,看看它们是否存在于哈希集中,如果长度大于当前最大子字符串,则调整最长的子字符串。我想知道的是:就str1
(假设str1
有长度n
)的长度而言,substr 的运行时间是多少?
#include<hash_set>
string longestCommonSubstring(string str1, string str2) {
hash_set<string> substrings;
string maxSubstring = "";
int maxLength = 0;
for (int i = 0; i < str1.size(); i++) {
for (int j = i+1; j < str1.size(); j++) {
substrings.insert(str1.substr(i,j-i));
}
}
for (int i = 0; i < str2.size(); i++) {
for (int j = i+1; j < str2.size(); j++) {
if (substrings.find(str2.substr(i,j-i)) != substrings.end()) {
if (j-i > maxLength) {
maxSubstring = str2.substr(i,j-1);
maxLength = j - i;
}
}
}
}
}