Open In App

Sum of frequencies of characters of a string present in another string

Last Updated : 14 May, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

Given two strings S1 and S2 of lengths M and N respectively, the task is to calculate the sum of the frequencies of the characters of string S1 in the string S2.

Examples:

Input: S1 = “pPKf”, S2 = “KKKttsdppfP”
Output: 7
Explanation:
The character ‘p’ occurs twice in the string S2.
The character ‘P’ occurs once in the string S2.
The character ‘K’ occurs thrice in the string S2.
The character ‘f’ occurs once in the string S2.
Therefore, in total, characters of the string S1 occurs 7 times in the string S2.

Input: S1 = “geEksFOR”, S2 = “GeEksforgeEKS”
Output: 7

Naive Approach: The simplest approach is to iterate over each character of the string S1, count its frequency in the string S2

Time Complexity: O(N2)
Auxiliary Space: O(1)

Efficient Approach: The above approach can be optimized by using Hashing. Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include<bits/stdc++.h>
using namespace std;
 
// Function to find sum of frequencies
// of characters of S1 present in S2
void countTotalFrequencies(string S1, string S2)
{
 
  // Insert all characters of
  // string S1 in the set
  set<char> bset;
  for(auto x:S1)
    bset.insert(x);
  int count = 0;
 
  // Traverse the string S2
  for (auto x: S2)
  {
 
    // Check if X is present
    // in bset or not
    if (bset.find(x) != bset.end())
 
      // Increment count by 1
      count += 1;
  }
 
  // Finally, print the count
  cout << count << endl;
 
}
 
// Driver Code
int main()
{
   
  // Given strings
  string S1 = "geEksFOR";
  string S2 = "GeEksforgeEKS";
 
  countTotalFrequencies(S1, S2);
 
}
 
// This code is contributed by ipg2016107.


Java




// Java program for the above approach
import java.util.HashSet;
 
class GFG{
 
// Function to find sum of frequencies
// of characters of S1 present in S2
static void countTotalFrequencies(String S1, String S2)
{
     
    // Insert all characters of
    // string S1 in the set
    HashSet<Character> bset = new HashSet<Character>();
    char[] S1arr = S1.toCharArray();
    char[] S2arr = S2.toCharArray();
     
    for(char x : S1arr)
        bset.add(x);
         
    int count = 0;
 
    // Traverse the string S2
    for(char x : S2arr)
    {
         
        // Check if X is present
        // in bset or not
        if (bset.contains(x))
 
            // Increment count by 1
            count += 1;
    }
 
    // Finally, print the count
    System.out.print(count);
}
 
// Driver code
public static void main(String[] args)
{
     
    // Given strings
    String S1 = "geEksFOR";
    String S2 = "GeEksforgeEKS";
 
    countTotalFrequencies(S1, S2);
}
}
 
// This code is contributed by abhinavjain194


Python3




# Python3 program for the above approach
 
# Function to find sum of frequencies
# of characters of S1 present in S2
def countTotalFrequencies(S1, S2):
 
    # Insert all characters of
    # string S1 in the set
    bset = set(S1)
    count = 0
 
    # Traverse the string S2
    for x in S2:
 
        # Check if X is present
        # in bset or not
        if x in bset:
 
            # Increment count by 1
            count += 1
 
    # Finally, print the count
    print(count)
 
# Driver Code
 
# Given strings
S1 = "geEksFOR"
S2 = "GeEksforgeEKS"
 
countTotalFrequencies(S1, S2)


C#




// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG {
     
// Function to find sum of frequencies
// of characters of S1 present in S2
static void countTotalFrequencies(string S1,
                                  string S2)
{
 
    // Insert all characters of
    // string S1 in the set
    HashSet<char> bset = new HashSet<char>();
 
    foreach(char x in S1)
        bset.Add(x);
         
    int count = 0;
 
    // Traverse the string S2
    foreach(char x in S2)
    {
 
        // Check if X is present
        // in bset or not
        if (bset.Contains(x))
 
            // Increment count by 1
            count += 1;
    }
     
    // Finally, print the count
    Console.Write(count);
}
 
// Driver code
static void Main()
{
     
    // Given strings
    string S1 = "geEksFOR";
    string S2 = "GeEksforgeEKS";
 
    countTotalFrequencies(S1, S2);
}
}
 
// This code is contributed by abhinavjain194


Javascript




<script>
 
// Javascript program for the above approach
 
// Function to find sum of frequencies
// of characters of S1 present in S2
function countTotalFrequencies(S1, S2)
{
     
    // Insert all characters of
    // string S1 in the set
    var bset = new Set();
    for(var i = 0; i < S1.length; i++)
    {
        bset.add(S1[i]);
    }
     
    var count = 0;
     
    // Traverse the string S2
    for(var i = 0; i < S2.length; i++)
    {
     
        // Check if X is present
        // in bset or not
        if (bset.has(S2[i]))
         
            // Increment count by 1
            count += 1;
    }
     
    // Finally, print the count
    document.write(count);
}
 
// Driver Code
 
// Given strings
var S1 = "geEksFOR";
var S2 = "GeEksforgeEKS";
 
countTotalFrequencies(S1, S2);
 
// This code is contributed by rutvik_56
 
</script>


Output: 

7

 

Time Complexity: O(N)
Auxiliary Space: O(N)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads