Given a string. The task is to find the count of characters whose number of occurrences is prime.
Examples:
Input : str = "geeksforgeeks" Output : 3 Count of occurrences of characters are: g -> 2 e -> 4 k -> 2 s -> 2 f -> 1 o -> 1 r -> 1 So, g, k and s occurs prime number of times i.e. 2 Input : str = "aabbcc" Output : 3
Start traversing the string and count the occurrences of each character using a map in C++ and check whether an occurrence is prime or not. If prime then increment the count otherwise not.
Algorithm:
- Create a static function named “check_prime” with a boolean return type that takes an integer as the input value.
- that will return true or false if the number is prime or not.
- Create a static function named countPrimeFreuent with in return type which takes a string as input.
- initialize an int variable count with a value of 0
- To store the frequency of each character in the string s, create a hashmap called mp.
- start for loop inside function which traverses the input string and updates its frequency in mp
- now iterate the map and characters with prime occurrences, If the frequency is prime, increment the count variable
- return the value of the count
Below is the implementation of the above approach:
C++
// C++ program to find count of numbers // with prime frequencies #include <bits/stdc++.h> using namespace std;
// Function to check if a // number is prime bool check_prime( int n)
{ // Corner cases
if (n <= 1)
return false ;
if (n <= 3)
return true ;
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0)
return false ;
for ( int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
} // Function to find count of numbers // with prime frequencies int countPrimeFrequent(string s)
{ int count = 0;
// create a map to store
// frequency of each character
unordered_map< char , int > mp;
// Store frequency of each character
// in the map
for ( int i = 0; i < s.length(); i++)
mp[s[i]]++;
// now iterate the map and characters
// with prime occurrences
for ( auto it = mp.begin(); it != mp.end(); it++) {
// if prime then increment count
if (check_prime(it->second))
count++;
}
return count;
} // Driver Code int main()
{ string s = "geeksforgeeks" ;
cout << countPrimeFrequent(s);
return 0;
} |
Java
// Java program to find count of numbers // with prime frequencies import java.util.*;
class GFG
{ // Function to check if a
// number is prime
static boolean check_prime( int n)
{
// Corner cases
if (n <= 1 )
{
return false ;
}
if (n <= 3 )
{
return true ;
}
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0 )
{
return false ;
}
for ( int i = 5 ; i * i <= n; i = i + 6 )
{
if (n % i == 0 || n % (i + 2 ) == 0 )
{
return false ;
}
}
return true ;
}
// Function to find count of numbers
// with prime frequencies
static int countPrimeFrequent(String s)
{
int count = 0 ;
// create a map to store
// frequency of each character
Map<Character, Integer> mp = new HashMap<>();
// Store frequency of each character
// in the map
for ( int i = 0 ; i < s.length(); i++)
{
if (mp.containsKey(s.charAt(i)))
{
mp.put(s.charAt(i), mp.get(s.charAt(i)) + 1 );
}
else
{
mp.put(s.charAt(i), 1 );
}
}
// now iterate the map and characters
// with prime occurrences
for (Map.Entry<Character, Integer> entry : mp.entrySet())
{
// if prime then increment count
if (check_prime(entry.getValue()))
{
count++;
}
}
return count;
}
// Driver Code
public static void main(String[] args)
{
String s = "geeksforgeeks" ;
System.out.println(countPrimeFrequent(s));
}
} // This code has been contributed by 29AjayKumar |
Python3
# python3 program to find count of numbers # with prime frequencies # Function to check if a # number is prime def check_prime(n):
# Corner cases
if (n < = 1 ):
return False
if (n < = 3 ):
return True
# This is checked so that we can skip
# middle five numbers in below loop
if (n % 2 = = 0 or n % 3 = = 0 ):
return False
for i in range ( 5 ,n + 1 , 6 ):
if (n % i = = 0 or n % (i + 2 ) = = 0 ):
return False
return True
# Function to find count of numbers # with prime frequencies def countPrimeFrequent(s):
count = 0
# create a map to store
# frequency of each character
mp = {}
# Store frequency of each character
# in the mp
for i in range ( 0 , len (s)):
mp.setdefault(s[i], 0 )
mp[s[i]] + = 1
# now iterate the map and characters
# with prime occurrences
for i in mp.keys():
# if prime then increment count
if (check_prime(mp[i])):
count + = 1
return count;
# Driver Code s = "geeksforgeeks"
print (countPrimeFrequent(s))
# This code is improved by sahilshelangia |
C#
// C# program to find count of numbers // with prime frequencies using System;
using System.Collections.Generic;
class GFG
{ // Function to check if a
// number is prime
static Boolean check_prime( int n)
{
// Corner cases
if (n <= 1)
{
return false ;
}
if (n <= 3)
{
return true ;
}
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0)
{
return false ;
}
for ( int i = 5; i * i <= n; i = i + 6)
{
if (n % i == 0 || n % (i + 2) == 0)
{
return false ;
}
}
return true ;
}
// Function to find count of numbers
// with prime frequencies
static int countPrimeFrequent(String s)
{
int count = 0;
// create a map to store
// frequency of each character
Dictionary< char , int > mp = new Dictionary< char , int >();
// Store frequency of each character
// in the map
for ( int i = 0; i < s.Length; i++)
{
if (mp.ContainsKey(s[i]))
{
var v = mp[s[i]] + 1;
mp.Remove(s[i]);
mp.Add(s[i], v);
}
else
{
mp.Add(s[i], 1);
}
}
// now iterate the map and characters
// with prime occurrences
foreach (KeyValuePair< char , int > entry in mp)
{
// if prime then increment count
if (check_prime(entry.Value))
{
count++;
}
}
return count;
}
// Driver Code
public static void Main(String[] args)
{
String s = "geeksforgeeks" ;
Console.WriteLine(countPrimeFrequent(s));
}
} // This code is contributed by Rajput-Ji |
Javascript
<script> // Javascript program to find count of numbers // with prime frequencies // Function to check if a // number is prime function check_prime(n) {
// Corner cases
if (n <= 1)
return false ;
if (n <= 3)
return true ;
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0)
return false ;
for (let i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
} // Function to find count of numbers // with prime frequencies function countPrimeFrequent(s) {
let count = 0;
// create a map to store
// frequency of each character
let mp = new Map();
// Store frequency of each character
// in the map
for (let i = 0; i < s.length; i++) {
if (mp.has(s[i])) {
mp.set(s[i], mp.get(s[i]) + 1);
}
else {
mp.set(s[i], 1);
}
}
// now iterate the map and characters
// with prime occurrences
for (let it of mp) {
// if prime then increment count
if (check_prime(it[1]))
count++;
}
return count;
} // Driver Code let s = "geeksforgeeks" ;
document.write(countPrimeFrequent(s)); // This code is contributed by Saurabh Jaiswal </script> |
Output
3
Time Complexity: O(n + n * sqrt(n)). where n is the length of the string.
Auxiliary Space: O(m). where m is the number of unique characters in the input string.