Array elements with prime frequencies
Last Updated :
03 Mar, 2023
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++
#include <bits/stdc++.h>
using namespace std;
bool check_prime( int n)
{
if (n <= 1)
return false ;
if (n <= 3)
return true ;
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 ;
}
int countPrimeFrequent(string s)
{
int count = 0;
unordered_map< char , int > mp;
for ( int i = 0; i < s.length(); i++)
mp[s[i]]++;
for ( auto it = mp.begin(); it != mp.end(); it++) {
if (check_prime(it->second))
count++;
}
return count;
}
int main()
{
string s = "geeksforgeeks" ;
cout << countPrimeFrequent(s);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static boolean check_prime( int n)
{
if (n <= 1 )
{
return false ;
}
if (n <= 3 )
{
return true ;
}
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 ;
}
static int countPrimeFrequent(String s)
{
int count = 0 ;
Map<Character, Integer> mp = new HashMap<>();
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 );
}
}
for (Map.Entry<Character, Integer> entry : mp.entrySet())
{
if (check_prime(entry.getValue()))
{
count++;
}
}
return count;
}
public static void main(String[] args)
{
String s = "geeksforgeeks" ;
System.out.println(countPrimeFrequent(s));
}
}
|
Python3
def check_prime(n):
if (n < = 1 ):
return False
if (n < = 3 ):
return True
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
def countPrimeFrequent(s):
count = 0
mp = {}
for i in range ( 0 , len (s)):
mp.setdefault(s[i], 0 )
mp[s[i]] + = 1
for i in mp.keys():
if (check_prime(mp[i])):
count + = 1
return count;
s = "geeksforgeeks"
print (countPrimeFrequent(s))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static Boolean check_prime( int n)
{
if (n <= 1)
{
return false ;
}
if (n <= 3)
{
return true ;
}
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 ;
}
static int countPrimeFrequent(String s)
{
int count = 0;
Dictionary< char , int > mp = new Dictionary< char , int >();
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);
}
}
foreach (KeyValuePair< char , int > entry in mp)
{
if (check_prime(entry.Value))
{
count++;
}
}
return count;
}
public static void Main(String[] args)
{
String s = "geeksforgeeks" ;
Console.WriteLine(countPrimeFrequent(s));
}
}
|
Javascript
<script>
function check_prime(n) {
if (n <= 1)
return false ;
if (n <= 3)
return true ;
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 countPrimeFrequent(s) {
let count = 0;
let mp = new 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);
}
}
for (let it of mp) {
if (check_prime(it[1]))
count++;
}
return count;
}
let s = "geeksforgeeks" ;
document.write(countPrimeFrequent(s));
</script>
|
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.
Share your thoughts in the comments
Please Login to comment...