是 C++中的 _ 排列()及其在字谜搜索中的应用
原文:https://www . geesforgeks . org/is _ arrange-c-application-anagram-search/
is _ 置换()用于检查两个容器(如字符串和向量)是否相互置换。它接受三个参数,前两个参数是第一个对象的开始和结束位置,第三个参数是第二个对象的开始位置。
卡片打印处理机(Card Print Processor 的缩写)
// C++ program to demonstrate working of
// is_permutation()
#include <bits/stdc++.h>
using namespace std;
// Driver program to test above
int main()
{
vector<int> v1{1, 2, 3, 4};
vector<int> 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<int> 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
我们已经讨论了一个解决方案。但是在这篇文章中,它是使用 is _ 置换()完成的。虽然复杂度高于之前讨论的方法,但目的是解释 is _ arrangement()的应用。 让待搜索图案的大小为 pat_len。这个想法是遍历给定的文本,对于 pat_len 大小的每个窗口,检查它是否是给定模式的排列。
卡片打印处理机(Card Print Processor 的缩写)
// C++ program to count all permutation of
// given text
#include<bits/stdc++.h>
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 matched 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
本文由 萨哈布拉 供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用write.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 review-team@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。 如果发现有不正确的地方,或者想分享更多关于上述话题的信息,请写评论。
版权属于:月萌API www.moonapi.com,转载请注明出处