Open In App

Find frequency of each character with positions in given Array of Strings

Given an array, arr[] consisting of N strings where each character of the string is lower case English alphabet, the task is to store and print the occurrence of every distinct character in every string.

Examples: 



Input: arr[] = { “geeksforgeeks”, “gfg” }
Output: Occurrences of: e = [1 2] [1 3] [1 10] [1 11] 
              Occurrences of: f = [1 6] [2 2] 
              Occurrences of: g = [1 1] [1 9] [2 1] [2 3] 
              Occurrences of: k = [1 4] [1 12] 
              Occurrences of: o = [1 7] 
              Occurrences of: r = [1 8] 
              Occurrences of: s = [1 5] [1 13]

Input: arr[] = { “abc”, “ab” }
Output: Occurrences of: a = [1 1] [2 1] 
              Occurrences of: b = [1 2] [2 2] 
              Occurrences of: c = [1 3] 
 



Approach: The above problem can be solved using Map and Vector data structures. Follow the steps below to solve the problem:

Below is the implementation of the above approach:




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print every occurrence
// of every characters in every string
void printOccurrences(vector<string> arr, int N)
{
    map<char, vector<pair<int, int> > > mp;
 
    // Iterate over the vector arr[]
    for (int i = 0; i < N; i++) {
        // Traverse the string arr[i]
        for (int j = 0; j < arr[i].length(); j++) {
 
            // Push the pair of{i+1, j+1}
            // in mp[arr[i][j]]
            mp[arr[i][j]].push_back(
                make_pair(i + 1, j + 1));
        }
    }
    // Print the occurrences of every
    // character
    for (auto it : mp) {
        cout << "Occurrences of: " << it.first << " = ";
        for (int j = 0; j < (it.second).size(); j++) {
            cout << "[" << (it.second)[j].first << " "
                 << (it.second)[j].second << "] ";
        }
        cout << endl;
    }
}
 
// Driver Code
int main()
{
    // Input
    vector<string> arr = { "geeksforgeeks", "gfg" };
    int N = arr.size();
    // Function call
    printOccurrences(arr, N);
}




import java.util.*;
import java.util.Map.Entry;
 
class GFG {
  public static void printOccurrences(List<String> arr, int N) {
    Map<Character, List<Pair<Integer, Integer>>> mp = new HashMap<>();
 
    // Iterate over the List arr[]
    for (int i = 0; i < N; i++)
    {
       
      // Traverse the string arr[i]
      for (int j = 0; j < arr.get(i).length(); j++)
      {
         
        // Push the pair of{i+1, j+1}
        // in mp[arr[i][j]]
        if (!mp.containsKey(arr.get(i).charAt(j))) {
          mp.put(arr.get(i).charAt(j), new ArrayList<>());
        }
        mp.get(arr.get(i).charAt(j)).add(new Pair<>(i + 1, j + 1));
      }
    }
     
    // Print the occurrences of every
    // character
    for (Entry<Character, List<Pair<Integer, Integer>>> it : mp.entrySet()) {
      System.out.print("Occurrences of: " + it.getKey() + " = ");
      for (int j = 0; j < it.getValue().size(); j++) {
        System.out.print("[" + it.getValue().get(j).getKey() + " " + it.getValue().get(j).getValue() + "] ");
      }
      System.out.println();
    }
  }
 
  // Driver Code
  public static void main(String[] args)
  {
     
    // Input
    List<String> arr = Arrays.asList("geeksforgeeks", "gfg");
    int N = arr.size();
     
    // Function call
    printOccurrences(arr, N);
  }
}
 
// custom pair class
class Pair<T, U> {
    private T key;
    private U value;
 
    public Pair(T key, U value) {
        this.key = key;
        this.value = value;
    }
 
    public T getKey() {
        return key;
    }
 
    public U getValue() {
        return value;
    }
}
 
// This code is contributed by aadityapburujwale




# Python3 program for the above approach
 
# Function to print every occurrence
# of every characters in every string
def printOccurrences(arr, N):
     
    mp = [[] for i in range(26)]
 
    # Iterate over the vector arr[]
    for i in range(N):
         
        # Traverse the string arr[i]
        for j in range(len(arr[i])):
             
            # Push the pair of{i+1, j+1}
            # in mp[arr[i][j]]
            mp[ord(arr[i][j]) - ord('a')].append(
                           (i + 1, j + 1))
             
    # print(mp)
 
    # Print the occurrences of every
    # character
    for i in range(26):
        if len(mp[i]) == 0:
            continue
         
        print("Occurrences of:", chr(i +
              ord('a')), "=", end = " ")
        for j in mp[i]:
            print("[" + str(j[0]) + " " +
                        str(j[1]) + "] ", end = "")
        print()
 
# Driver Code
if __name__ == '__main__':
     
    # Input
    arr= [ "geeksforgeeks", "gfg" ]
    = len(arr)
     
    # Function call
    printOccurrences(arr, N)
 
# This code is contributed by mohit kumar 29




using System;
using System.Collections.Generic;
 
class Program
{
    static void Main(string[] args)
    {
        string[] arr = { "geeksforgeeks", "gfg" };
        int N = arr.Length;
 
        Dictionary<char, List<Tuple<int, int>>> mp = new Dictionary<char, List<Tuple<int, int>>>();
 
      // Push the pair of{i+1, j+1}
        // in mp[arr[i][j]]
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < arr[i].Length; j++)
            {
                if (!mp.ContainsKey(arr[i][j]))
                {
                    mp[arr[i][j]] = new List<Tuple<int, int>>();
                }
                mp[arr[i][j]].Add(Tuple.Create(i + 1, j + 1));
            }
        }
 
      // Print the occurrences of every
    // character
        foreach (var item in mp)
        {
            Console.WriteLine("Occurrences of: " + item.Key + " = ");
            foreach (var pair in item.Value)
            {
                Console.Write("[" + pair.Item1 + " " + pair.Item2 + "] ");
            }
            Console.WriteLine();
        }
    }
}
 
// This code is contributed by divyansh2212




<script>
 
// JavaScript program for the above approach
 
// Function to print every occurrence
// of every characters in every string
function printOccurrences(arr, N) {
  let mp = new Map();
 
  // Iterate over the vector arr[]
  for (let i = 0; i < N; i++) {
    // Traverse the string arr[i]
    for (let j = 0; j < arr[i].length; j++) {
      // Push the pair of{i+1, j+1}
      // in mp[arr[i][j]]
      if (mp.has(arr[i][j])) {
        let temp = mp.get(arr[i][j]);
        temp.push([i + 1, j + 1]);
 
        mp.set(arr[i][j], temp);
      } else {
        mp.set(arr[i][j], [[i + 1, j + 1]]);
      }
    }
  }
  // Print the occurrences of every
  // character
  for (let it of new Map([...mp.entries()].sort())) {
    document.write("Occurrences of: " + it[0] + " = ");
    for (let j = 0; j < it[1].length; j++) {
      document.write(" [" + it[1][j][0] + " " + it[1][j][1] + "] ");
    }
    document.write("<br>");
  }
}
 
// Driver Code
 
// Input
let arr = ["geeksforgeeks", "gfg"];
let N = arr.length;
// Function call
printOccurrences(arr, N);
 
</script>

Output
Occurrences of: e = [1 2] [1 3] [1 10] [1 11] 
Occurrences of: f = [1 6] [2 2] 
Occurrences of: g = [1 1] [1 9] [2 1] [2 3] 
Occurrences of: k = [1 4] [1 12] 
Occurrences of: o = [1 7] 
Occurrences of: r = [1 8] 
Occurrences of: s = [1 5] [1 13] 

Time Complexity: O(N*M), where M is the length of the longest string.
Auxiliary Space: O(N*M)


Article Tags :