您将获得一组字符串和一个查询列表。对于每个查询,都会给出一个字符串。我们需要打印给定字符串在字符串集合中出现的次数。
例子:
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 现场工作专业课程和学生竞争性编程现场课程。