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
廣告