# What is the most efficient way to find a string in a group of string?

Ex:
string=“King”
arr=[“Queen”, “Pawn”, “Kaleen”, “Munna”, “King”, “Minister”]
we need to find if “king” is present in arr or not…

This is a very simple question. Following code will work.

``````#include<bits/stdc++.h>
using namespace std ;
int main(){
string find="King" ;
bool check1=0;
string arr[]={"Queen", "Pawn", "Kaleen", "Munna", "King", "Minister"} ;
for(int i=0;i<6;i++){
int N = find.size() ;
int M = arr[i].size() ;
bool check =1 ;
for(int j=0;j<min(N,M);j++){
if(find[j]!=arr[i][j]){
check=0 ;
}
}
if(check)
cout << "YES" ,check1=1;
}
if(!check1)
cout <<"NO" ;

}
``````

It’s better to store strings in a hashtable and finding the string in it. Average time complexity is O(1).

1 Like

Which language do u use:

In python this works:

``````if requiredString in Strings:
print ('yes')
else:
print('no')
``````

In cpp you can do something like this:

``````void solve()
{

unordered_map < string , int > mp ;

int n ;

cin >> n ;

string a ;

for(int i = 0 ; i < n ; ++i) {
cin >> a ;
mp[a]++ ;
}

string req ;

cin >> req ;

cout << ((mp[req] >= 1) ? "yes" : "no") ;

}``````

You might want to use Trie Data Structure. Sets will also Work.
Using Trie: O(|S|)
Using Sets: O(|S|. log(|arr|)).

Example in Python:

``````arr = set(arr)
print(input() in arr)
``````