📜  字符串数组中字符串的频率

📅  最后修改于: 2021-10-27 09:10:32             🧑  作者: Mango

您将获得一组字符串和一个查询列表。对于每个查询,都会给出一个字符串。我们需要打印给定字符串在字符串集合中出现的次数。
例子:

Input : arr[] = {wer, wer, tyu, oio, tyu}
        q[] =   {wer, tyu, uio}
Output : 2 2 0
Explanation : 
q[0] appears two times in arr[], q1[] appears

方法一(简单)

这个想法很简单,对于每个查询字符串,我们将它与数组中给出的所有字符串进行比较。如果查询字符串匹配,我们增加计数。

C++
// C++ program to find number of times a
// string appears in an array.
#include
using namespace std;
 
// Returns count of occurrences of s in arr[]
int search(string arr[], string s, int n)
{
    int counter = 0;
 
    for(int j = 0; j < n; j++)
     
        // Checking if string given in query
        // is present in the given string.
        // If present, increase times
        if (s == arr[j])
            counter++;
 
   return counter;
}
  
void answerQueries(string arr[], string q[],
                   int n, int m)
{
    for(int i = 0; i < m; i++)
        cout << search(arr, q[i], n) << " ";
}   
 
// Driver Code
int main()
{
    string arr[] = { "aba", "baba",
                     "aba", "xzxb" };
    string q[]   = { "aba", "xzxb", "ab" };
     
    int n = sizeof(arr) / sizeof(arr[0]);
    int m = sizeof(q) / sizeof(q[0]);
     
    answerQueries(arr, q, n, m);
}
 
// This code is contributed by rutvik_56


Java
// Java program to find number of times a string
// appears in an array.
class SubString
{
    /* Returns count of occurrences of s in arr[] */
    static int search(String[]arr, String s)
    {
            int counter = 0;
            for (int j = 0; j < arr.length; j++)
 
                /* checking if string given in query is
                  present in the given string. If present,
                  increase times*/
                if (s.equals(arr[j]))
                    counter++;
 
           return counter;
    }
 
    static void answerQueries(String[] arr, String q[])
    {
        for (int i=0;i


Python3
# Python3 program to find number of
# times a string appears in an array.
 
# Returns count of occurrences of s in arr[]
def search(arr, s):
    counter = 0
    for j in range(len(arr)):
         
        # checking if string given in query
        # is present in the given string. 
        # If present, increase times
        if (s == (arr[j])):
            counter += 1
 
    return counter
 
def answerQueries(arr, q):
    for i in range(len(q)):
        print(search(arr, q[i]),
                     end = " ")
 
# Driver code
if __name__ == '__main__':
    arr = ["aba", "baba", "aba", "xzxb"]
    q = ["aba", "xzxb", "ab"]
    answerQueries(arr, q)
 
# This code is contributed
# by PrinciRaj19992


C#
// C# program to find number of
// times a string appears in an array.
using System;
 
class SubString
{
    /* Returns count of occurrences of s in arr[] */
    static int search(String[]arr, String s)
    {
            int counter = 0;
            for (int j = 0; j < arr.Length; j++)
 
                /* checking if string given in query is
                present in the given string. If present,
                increase times*/
                if (s.Equals(arr[j]))
                    counter++;
 
        return counter;
    }
 
    static void answerQueries(String []arr, String []q)
    {
        for (int i = 0; i < q.Length; i++)
            Console.Write(search(arr, q[i]) + " ");
    }
 
    // Driver code
    public static void Main()
    {
        String []arr = {"aba","baba","aba","xzxb"};
        String []q = {"aba","xzxb","ab"};
        answerQueries(arr, q);
    }
}
 
//This code is contributed by nitin mittal


PHP


CPP
// C++ program to count number of times
// a string appears in an array of strings
#include
using namespace std;
 
const int MAX_CHAR = 26;
 
struct Trie
{
    // To store number of times
    // a string is present. It is
    // 0 is string is not present
    int cnt;
 
    Trie *node[MAX_CHAR];
    Trie()
    {
        for(int i=0; inode[index])
            root->node[index] = new Trie();
 
        root = root->node[index];
    }
    root->cnt++;
    return temp;
}
 
/* Returns count of occurrences of s in Trie*/
int search(Trie *root, string s)
{
    int n = s.size();
    for (int i=0; inode[index])
            return 0;
        root = root->node[index];
    }
    return root->cnt;
}
 
void answerQueries(string arr[], int n, string q[],
                                           int m)
{
    Trie *root = new Trie();
 
    /* inserting in Trie */
    for (int i=0; i


Python3
# Python3 program to count number of times
# a string appears in an array of strings
MAX_CHAR = 26
 
class Trie:
 
    # To store number of times
    # a string is present. It is
    # 0 is string is not present
    def __init__(self):
        self.cnt = 0
        self.node = [None for i in range(MAX_CHAR)]
 
# function to insert a string into the Trie
def insert(root, s):
    temp = root
    n = len(s)
     
    for i in range(n):
 
        # calculation ascii value
        index = ord(s[i]) - ord('a')
 
        ''' If the given node is not already
        present in the Trie than create
        the new node '''
        if (not root.node[index]):
            root.node[index] = Trie()
        root = root.node[index]   
    root.cnt += 1   
    return temp
 
# Returns count of occurrences of s in Trie
def search( root, s):
    n = len(s)
     
    for i in range(n):   
        index = ord(s[i]) - ord('a')
        if (not root.node[index]):
            return 0
        root = root.node[index]   
    return root.cnt
 
def answerQueries(arr, n, q, m):
 
    root = Trie()
 
    # inserting in Trie
    for i in range(n):
        root = insert(root, arr[i])
 
    # searching the strings in Trie
    for i in range(m):
        print(search(root, q[i]))
 
# Driver code
if __name__=='__main__':
 
    arr = ["aba", "baba", "aba", "xzxb"]
    n = len(arr)
 
    q = ["aba", "xzxb", "ab"]
    m = len(q)
 
    answerQueries(arr, n, q, m)
 
    # This code is contributed by pratham76


输出:

2 1 0

方法二(使用Trie)

尝试一种有效的数据结构,用于强和检索字符串等数据。搜索复杂度作为密钥长度是最佳的。
在这个解决方案中,我们在 Trie 数据结构中插入字符串集合,以便将它们存储在其中。一件重要的事情是,我们记录叶节点中出现的次数。然后我们在 Trie 中搜索给定的查询字符串并检查它是否存在于 Trie 中。

CPP

// C++ program to count number of times
// a string appears in an array of strings
#include
using namespace std;
 
const int MAX_CHAR = 26;
 
struct Trie
{
    // To store number of times
    // a string is present. It is
    // 0 is string is not present
    int cnt;
 
    Trie *node[MAX_CHAR];
    Trie()
    {
        for(int i=0; inode[index])
            root->node[index] = new Trie();
 
        root = root->node[index];
    }
    root->cnt++;
    return temp;
}
 
/* Returns count of occurrences of s in Trie*/
int search(Trie *root, string s)
{
    int n = s.size();
    for (int i=0; inode[index])
            return 0;
        root = root->node[index];
    }
    return root->cnt;
}
 
void answerQueries(string arr[], int n, string q[],
                                           int m)
{
    Trie *root = new Trie();
 
    /* inserting in Trie */
    for (int i=0; i

蟒蛇3

# Python3 program to count number of times
# a string appears in an array of strings
MAX_CHAR = 26
 
class Trie:
 
    # To store number of times
    # a string is present. It is
    # 0 is string is not present
    def __init__(self):
        self.cnt = 0
        self.node = [None for i in range(MAX_CHAR)]
 
# function to insert a string into the Trie
def insert(root, s):
    temp = root
    n = len(s)
     
    for i in range(n):
 
        # calculation ascii value
        index = ord(s[i]) - ord('a')
 
        ''' If the given node is not already
        present in the Trie than create
        the new node '''
        if (not root.node[index]):
            root.node[index] = Trie()
        root = root.node[index]   
    root.cnt += 1   
    return temp
 
# Returns count of occurrences of s in Trie
def search( root, s):
    n = len(s)
     
    for i in range(n):   
        index = ord(s[i]) - ord('a')
        if (not root.node[index]):
            return 0
        root = root.node[index]   
    return root.cnt
 
def answerQueries(arr, n, q, m):
 
    root = Trie()
 
    # inserting in Trie
    for i in range(n):
        root = insert(root, arr[i])
 
    # searching the strings in Trie
    for i in range(m):
        print(search(root, q[i]))
 
# Driver code
if __name__=='__main__':
 
    arr = ["aba", "baba", "aba", "xzxb"]
    n = len(arr)
 
    q = ["aba", "xzxb", "ab"]
    m = len(q)
 
    answerQueries(arr, n, q, m)
 
    # This code is contributed by pratham76

输出:

2
1
0

方法三(散列)

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