重複の可能性:
std::string::substr メンバー関数の複雑さは?
一般的な部分文字列の問題に対する素朴な解決策を試みています。これを行うには、まず最初の文字列のすべての部分文字列を見つけて、それらをハッシュ セットに追加します。次に、2 番目の文字列の部分文字列を見つけて、それらがハッシュ セットに存在するかどうかを確認し、長さが現在の最大部分文字列よりも大きい場合は、最長の部分文字列を調整します。私が疑問に思っていたのは、substrの長さに関して、substrの実行時間は何ですかstr1
(たとえば、str1
has length n
)?
#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;
}
}
}
}
}