Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

XOR ของความถี่เฉพาะของอักขระในสตริงใน C++


ในปัญหานี้ เราได้รับสตริงของอักขระ หน้าที่ของเราคือพิมพ์ XOR ของความถี่ของอักขระของสตริงที่มีความถี่ของการเกิดเป็นจำนวนเฉพาะ

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล − TutorialsPoint

ผลผลิต

ในที่นี้ เราจะตรวจสอบความถี่ของการเกิดขึ้นของอักขระแต่ละตัวในสตริง จากนั้นค้นหา XOR ของอักขระทั้งหมดที่มีความถี่เป็นจำนวนเฉพาะ สำหรับสิ่งนี้จะสร้างอาร์เรย์ของความถี่เฉพาะ จากนั้นเราจะเก็บความถี่ของอักขระของสตริงในแผนที่แล้วจับคู่กับอาร์เรย์ความถี่หลัก หากพบการจับคู่ xor ถูกพบ เมื่อวนซ้ำไปยังองค์ประกอบทั้งหมดของแผนที่ เราสามารถค้นหา XOR ที่ต้องการได้

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา

#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