가능한 중복 :
What is the complexity of std::string::substr member function?C++에서 string :: substr()의 런타임은 무엇입니까?
나는 일반 문자열 문제에 대한 순진 솔루션을 시도하고있다. 첫 번째 문자열의 모든 부분 문자열을 찾아 해시 집합에 추가하여이 작업을 수행합니다. 그런 다음 두 번째 문자열의 하위 문자열을 찾아서 해시 집합에 있는지 확인하고 길이가 현재 최대 하위 문자열보다 큰 경우 가장 긴 하위 문자열을 조정합니다. 내가 궁금해 한 것은 : str1
의 길이 측면에서 substr의 런타임은 무엇입니까 (str1
길이가 이라고 가정 해 봅시다).
#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;
}
}
}
}
}
좋아요, 그 말이 맞습니다. 그래서 알고리즘의 런타임은 O (n^3)입니까? – ArKi
C++ 11에서 참조 카운팅 문자열이 불법 일 수도 있지만 대안은 이전 GCC로 작성된 코드와 링크하는 것이 불가능하거나 끔찍한 버그가 발생하는 것입니다. –
@ZanLynx : 올바른 해결책은 이전 C++ 98 G ++'std :: string'과 링크 호환되는'__gnu_cxx :: string98'을 소개하는 것입니다. – MSalters