Weighted sum of the characters of a string in an array | Set 2

You are given an array of strings str[], the task is to find the score of a given string s from the array. The score of a string is defined as the product of the sum of its characters’s alphabetical values with the position of the string in the array.

Examples:

Input: str[] = {“sahil”, “shashanak”, “sanjit”, “abhinav”, “mohit”}, s = “abhinav”
Output: 228
Sum of alphabetical values of “abhinav” = 1 + 2 + 8 + 9 + 14 + 1 + 22 = 57
Position of “abhinav” in str is 4, 57 x 4 = 228

Input: str[] = {“geeksforgeeks”, “algorithms”, “stack”}, s = “algorithms”
Output: 244

Approach:
In SET 1, we saw an approach where every time a query is being executed, the position of the string has to be found with a single traversal of str[]. This can be optimized when there are a number of queries using a hash table.

  • Create a hash map of all the strings present in str[] along with their respective positions in the array.
  • Then for every query s, check if s is present in the map. If yes then calculate the sum of the alphabetical values of s and store it in sum.
  • Print sum * pos where pos is the value associated with s in map i.e. its position in str[].

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the required string score
int strScore(string str[], string s, int n)
{
    // create a hash map of strings in str
    unordered_map<string, int> m;
  
    // Store every string in the map
    // along with its position in the array
    for (int i = 0; i < n; i++)
        m[str[i]] = i + 1;
  
    // If given string is not present in str[]
    if (m.find(s) == m.end())
        return 0;
  
    int score = 0;
  
    for (int i = 0; i < s.length(); i++)
        score += s[i] - 'a' + 1;
  
    // Multiply sum of alphabets with position
    score = score * m[s];
  
    return score;
}
  
// Driver code
int main()
{
    string str[] = { "geeksforgeeks", "algorithms", "stack" };
    string s = "algorithms";
    int n = sizeof(str) / sizeof(str[0]);
    int score = strScore(str, s, n);
    cout << score;
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.HashMap;
import java.util.Map;
  
class GfG
{
    // Function to return the required string score 
    static int strScore(String str[], String s, int n) 
    
        // create a hash map of strings in str 
        HashMap<String, Integer> m = new HashMap<>(); 
      
        // Store every string in the map 
        // along with its position in the array 
        for (int i = 0; i < n; i++) 
            m.put(str[i], i + 1); 
      
        // If given string is not present in str[] 
        if (!m.containsKey(s)) 
            return 0
      
        int score = 0
      
        for (int i = 0; i < s.length(); i++) 
            score += s.charAt(i) - 'a' + 1
      
        // Multiply sum of alphabets with position 
        score = score * m.get(s); 
      
        return score; 
    
  
    // Driver code
    public static void main(String []args)
    {
        String str[] = { "geeksforgeeks", "algorithms"
                                            "stack" }; 
        String s = "algorithms"
        int n = str.length; 
        System.out.println(strScore(str, s, n));
          
    }
}
  
// This code is contributed by Rituraj Jain

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
  
# Function to return the required 
# string score 
def strScore(string, s, n) : 
  
    # create a hash map of strings in str 
    m = {} 
  
    # Store every string in the map 
    # along with its position in the array 
    for i in range(n) : 
        m[string[i]] = i + 1
  
    # If given string is not present in str[] 
    if s not in m.keys() :
        return 0
  
    score = 0
  
    for i in range(len(s)) :
        score += ord(s[i]) - ord('a') + 1
  
    # Multiply sum of alphabets 
    # with position 
    score = score * m[s] 
  
    return score 
  
# Driver code 
if __name__ == "__main__"
  
    string = [ "geeksforgeeks"
               "algorithms", "stack"
    s = "algorithms"
    n = len(string)
    score = strScore(string, s, n); 
    print(score) 
  
# This code is contributed by Ryuga

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
using System.Collections.Generic;
  
class GfG
{
    // Function to return the required string score 
    static int strScore(string [] str, string s, int n) 
    
        // create a hash map of strings in str 
        Dictionary<string, int> m = new Dictionary<string, int>();
          
        // Store every string in the map 
        // along with its position in the array 
        for (int i = 0; i < n; i++) 
            m[str[i]] = i + 1; 
      
        // If given string is not present in str[] 
        if (!m.ContainsKey(s)) 
            return 0; 
      
        int score = 0; 
      
        for (int i = 0; i < s.Length; i++) 
            score += s[i] - 'a' + 1; 
      
        // Multiply sum of alphabets with position 
        score = score * m[s]; 
      
        return score; 
    
  
    // Driver code
    public static void Main()
    {
        string [] str = { "geeksforgeeks", "algorithms"
                                            "stack" }; 
        string s = "algorithms"
        int n = str.Length; 
        Console.WriteLine(strScore(str, s, n));
          
    }
}
  
// This code is contributed by ihritik

chevron_right


Output:

244


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.