is_permutations()用于检查字符串和向量之类的两个容器是否相互置换。它接受三个参数,前两个参数是第一个对象的开始和结束位置,第三个参数是第二个对象的开始位置。
// C++ program to demonstrate working of
// is_permutation()
#include
using namespace std;
// Driver program to test above
int main()
{
vector v1{1, 2, 3, 4};
vector v2{2, 3, 1, 4};
// v1 and v2 are permutation of each other
if (is_permutation(v1.begin(), v1.end(), v2.begin()))
cout << "True\n";
else
cout << "False\n";
// v1 and v3 are NOT permutation of each other
vector v3{5, 3, 1, 4};
if (is_permutation(v1.begin(), v1.end(), v3.begin()))
cout << "True\n";
else
cout << "False\n";
return 0;
}
输出 :
True
False
给定一个模式和一个文本,找到文本中所有出现的模式及其七巧板。
例子:
Input : text ="forxxorfxdofr"
pat = "for"
Output : 3
There are three anagrams of "for"
int text.
Input : word = "aabaabaa"
text = "aaba"
Output : 4
我们已经讨论了一个(n)解决方案。但是在这篇文章中,它是使用is_permutation()完成的。尽管复杂度高于先前讨论的方法,但目的是解释is_permutation()的应用。
将要搜索的模式的大小设为pat_len。这个想法是遍历给定的文本,对于pat_len大小的每个窗口,检查它是否是给定模式的排列。
// C++ program to count all permutation of
// given text
#include
using namespace std;
// Function to count occurrences of anagrams of pat
int countAnagrams(string text, string pat)
{
int t_len = text.length();
int p_len = pat.length();
// Start traversing the text
int count = 0; // Initialize result
for (int i=0; i<=t_len-p_len; i++)
// Check if substring text[i..i+p_len]
// is a permutation of pat[].
// Three parameters are :
// 1) Beginning position of current window in text
// 2) End position of current window in text
// 3) Pattern to be mathced with current window
if (is_permutation(text.begin()+i,
text.begin()+i+p_len,
pat.begin()))
count++;
return count;
}
// Driver code
int main()
{
string str = "forxxorfxdofr";
string pat = "for";
cout << countAnagrams(str, pat) << endl;
return 0;
}
输出:
3
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。