📜  数组中字符串字符的加权和| 2套

📅  最后修改于: 2021-10-27 07:06:33             🧑  作者: Mango

给定一个字符串数组str[] ,任务是从数组中找到给定字符串s的分数。的字符串的分数被定义为它的字符的字母值与所述阵列中的字符串的位置乘积
例子:

方法:
在 SET 1 中,我们看到了一种方法,每次执行查询时,都必须通过一次遍历str[]来找到字符串的位置。这可以在使用哈希表进行大量查询时进行优化。

  • 创建str[]中所有字符串及其在数组中各自位置的哈希映射。
  • 然后对于每个查询s ,检查s是否存在于地图中。如果是,则计算s的字母值的总和并将其存储在sum 中
  • 打印sum * pos其中pos是与 map 中的s相关联的值,即它在str[] 中的位置。

下面是上述方法的实现:

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[0]);
    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 m = new Dictionary();
         
        // 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


Javascript


输出:
244

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程