📌  相关文章
📜  字符串中字符频率的和与积

📅  最后修改于: 2021-10-27 08:08:23             🧑  作者: Mango

给定一个只包含小写英文字母的字符串str ,任务是找到str 中字符的所有素数频率的总和和乘积。
例子:

方法:

  • 遍历字符串并将所有字符的频率存储在哈希表中。
  • 使用 Sieve Of Eratosthenes 找出质数频率。
  • 计算所有这些素数频率的总和和乘积,最后打印总和和乘积。

下面是上述方法的实现:

C++
// C++ program to find Sum and product of Prime
// Frequencies of Characters in a String
#include 
using namespace std;
 
// Function to create Sieve to check primes
void SieveOfEratosthenes(bool prime[], int p_size)
{
    // false here indicates
    // that it is not prime
    prime[0] = false;
    prime[1] = false;
 
    for (int p = 2; p * p <= p_size; p++) {
 
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p]) {
 
            // Update all multiples of p,
            // set them to non-prime
            for (int i = p * 2; i <= p_size; i += p)
                prime[i] = false;
        }
    }
}
 
// Function to find the sum of prime frequencies
// of the characters of the given string
void sumProdOfPrimeFreq(string s)
{
    bool prime[s.length() + 1];
    memset(prime, true, sizeof(prime));
 
    SieveOfEratosthenes(prime, s.length() + 1);
 
    int i, j;
 
    // map is used to store
    // character frequencies
    unordered_map m;
    for (i = 0; i < s.length(); i++)
        m[s[i]]++;
 
    int sum = 0, product = 1;
 
    // Traverse the map
    for (auto it = m.begin(); it != m.end(); it++) {
 
        // If the frequency is prime
        if (prime[it->second]) {
            sum += it->second;
            product *= it->second;
        }
    }
 
    cout << "Sum = " << sum;
    cout << "\nProduct = " << product;
}
 
// Driver code
int main()
{
    string s = "geeksforgeeks";
 
    sumProdOfPrimeFreq(s);
    return 0;
}


Java
// Java program to find Sum and product of Prime
// Frequencies of Characters in a String
import java.util.*;
 
class GFG
{
 
    // Function to create Sieve to check primes
    static void SieveOfEratosthenes(boolean prime[],
                                        int p_size)
    {
        // false here indicates
        // that it is not prime
        prime[0] = false;
        prime[1] = false;
 
        for (int p = 2; p * p <= p_size; p++)
        {
 
            // If prime[p] is not changed,
            // then it is a prime
            if (prime[p])
            {
 
                // Update all multiples of p,
                // set them to non-prime
                for (int i = p * 2; i < p_size; i += p)
                {
                    prime[i] = false;
                }
            }
        }
    }
 
    // Function to find the sum of prime frequencies
    // of the characters of the given string
    static void sumProdOfPrimeFreq(char[] s)
    {
        boolean[] prime = new boolean[s.length + 1];
        Arrays.fill(prime, true);
 
        SieveOfEratosthenes(prime, s.length + 1);
 
        int i, j;
 
        // map is used to store
        // character frequencies
        Map mp = new HashMap<>();
        for (i = 0; i < s.length; i++)
        {
            mp.put(s[i], mp.get(s[i]) == null ? 1 : mp.get(s[i]) + 1);
        }
 
        int sum = 0, product = 1;
 
        // Traverse the map
        for (Map.Entry it : mp.entrySet())
        {
 
            // If the frequency is prime
            if (prime[it.getValue()])
            {
                sum += it.getValue();
                product *= it.getValue();
            }
        }
 
        System.out.print("Sum = " + sum);
        System.out.println("\nProduct = " + product);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String s = "geeksforgeeks";
 
        sumProdOfPrimeFreq(s.toCharArray());
    }
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 program to find Sum and product of Prime
# Frequencies of Characters in a String
 
# Function to create Sieve to check primes
def SieveofEratosthenes(prime, p_size):
 
    # false here indicates
    # that it is not prime
    prime[0] = False
    prime[1] = False
 
    for p in range(2, p_size + 1):
 
        # If prime[p] is not changed,
        # then it is a prime
        if prime[p]:
 
            # Update all multiples of p,
            # set them to non-prime
            for i in range(p * 2, p_size + 1, p):
                prime[i] = False
 
# Function to find the sum of prime frequencies
# of the characters of the given string
def sumProdOfPrimeFreq(s):
    prime = [True] * (len(s) + 2)
 
    SieveofEratosthenes(prime, len(s) + 1)
 
    i = 0
    j = 0
 
    # map is used to store
    # character frequencies
    m = dict()
 
    for i in range(len(s)):
        m[s[i]] = (m[s[i]] + 1) if s[i] in m else 1
 
    s = 0
    product = 1
 
    # Traverse the map
    for it in m:
 
        # If the frequency is prime
        if prime[m[it]]:
            s += m[it]
            product *= m[it]
 
    print("Sum =", s)
    print("Product =", product)
 
# Driver code
if __name__ == "__main__":
    s = "geeksforgeeks"
    sumProdOfPrimeFreq(s)
 
# This code is contributed by
# sanjeev2552


C#
// C# program to find Sum and product of Prime
// Frequencies of Characters in a String
using System;
using System.Collections.Generic;
 
class GFG
{
 
    // Function to create Sieve to check primes
    static void SieveOfEratosthenes(bool []prime,
                                        int p_size)
    {
        // false here indicates
        // that it is not prime
        prime[0] = false;
        prime[1] = false;
 
        for (int p = 2; p * p <= p_size; p++)
        {
 
            // If prime[p] is not changed,
            // then it is a prime
            if (prime[p])
            {
 
                // Update all multiples of p,
                // set them to non-prime
                for (int i = p * 2; i < p_size; i += p)
                {
                    prime[i] = false;
                }
            }
        }
    }
 
    // Function to find the sum of prime frequencies
    // of the characters of the given string
    static void sumProdOfPrimeFreq(char[] s)
    {
        int i;
        bool[] prime = new bool[s.Length + 1];
        for(i=0;i mp = new Dictionary();
        for (i = 0 ; i < s.Length; i++)
        {
            if(mp.ContainsKey(s[i]))
            {
                var val = mp[s[i]];
                mp.Remove(s[i]);
                mp.Add(s[i], val + 1);
            }
            else
            {
                mp.Add(s[i], 1);
            }
        }
 
        int sum = 0, product = 1;
 
        // Traverse the map
        foreach(KeyValuePair it in mp)
        {
 
            // If the frequency is prime
            if (prime[it.Value])
            {
                sum += it.Value;
                product *= it.Value;
            }
        }
 
        Console.Write("Sum = " + sum);
        Console.WriteLine("\nProduct = " + product);
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        String s = "geeksforgeeks";
 
        sumProdOfPrimeFreq(s.ToCharArray());
    }
}
 
// This code is contributed by Princi Singh


Javascript


输出:
Sum = 6
Product = 8