滑动窗口
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
sort(p.begin(),p.end());
int len_p = p.size();
int len_s = s.size();
vector<int> ans;
if(len_p > len_s)
return ans;
string temp;
for(int i = 0;i <= len_s - len_p;i++)
{
temp = s.substr(i,len_p);
sort(temp.begin(),temp.end());
if(temp == p)
ans.push_back(i);
}
return ans;
}
};
时间复杂度
假设s的长度是n,p的长度是m。时间复杂度是O[(n-m+1)(m+mlogm+m)],即O[(n-m+1)mlogm]。
substr时间复杂度是O(m),对temp排序的时间复杂度是O(mlogm),对比temp和p的内容是否一样的时间复杂度也是O(m)。