C++ 中字符串中字符质数频率的异或
在该问题中,我们给定一个字符串,我们的任务是打印其频率为质数的字符的频率的异或。
我们举一个例子来理解这个问题,
输入 − TutorialsPoint
输出 −
这里,我们将检查字符串每个字符的出现频率,然后找到频率为质数的所有字符的异或。为此,我们需要创建一个质数频率数组。然后,我们将字符串字符的频率存储在一个映射中,再与质数频率数组匹配。如果找到匹配,则找到异或,通过遍历映射的所有元素,我们可以找到所需的异或。
示例
程序演示我们解决方案的实现,
#include <bits/stdc++.h> using namespace std; void findPrimes(bool prime[], int p_size){ prime[0] = false; prime[1] = false; for (int p = 2; p * p <= p_size; p++) { if (prime[p]) { for (int i = p * 2; i <= p_size; i += p) prime[i] = false; } } } int findPrimeXOR(string s){ bool prime[100005]; memset(prime, true, sizeof(prime)); findPrimes(prime, 10005); int i, j; map<char, int> charFreq; for (i = 0; i < s.length(); i++) charFreq[s[i]]++; int result = 0; int flag = 0; for (auto i = charFreq.begin(); i != charFreq.end(); i++) { if (prime[i->second]) { result = result ^ i->second; flag = 1; } } if (!flag) return -1; return result; } int main(){ string s = "tutorialspoint"; cout<<"The XOR of frequencies of character which have prime frequencies is : "; cout<<findPrimeXOR(s); return 0; }
输出
The XOR of frequencies of character which have prime frequencies is : 3
广告