这是一种算法,计算一个字符串(search_word)在另一个(文本)中出现的字谜:
#include<iostream>
#include<algorithm>
#include<string>
#include<deque>
using namespace std;
int main()
{
string text = "forxxorfxdofr";
string search_word = "for";
deque<char> word;
word.insert(word.begin(), text.begin(), text.begin() + search_word.size());
int ana_cnt = 0;
for (int ix = 3; ix <= text.size(); ++ix)
{
deque<char> temp = word;
sort(word.begin(), word.end());
if (string(word.begin(), word.end()) == search_word)
++ana_cnt;
word = temp;
word.pop_front();
word.push_back(text[ix]);
}
cout << ana_cnt << endl;
}
这个算法的复杂度是多少?
我认为这是O(n)
算法,n
文本的长度在哪里。这是因为执行 for 循环内部所需的时间量与n
. 然而,也有人认为不是O(n)
。他们说排序算法在计算复杂度时也很重要。