# 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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// C++ implementation of the approach ` `#include ` `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 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); ` `    ``int` `score = strScore(str, s, n); ` `    ``cout << score; ` ` `  `    ``return` `0; ` `} `

## Java

 `// 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 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 `

## Python3

 `# 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 `

## C#

 `// 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 `

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.