# Find the character in first string that is present at minimum index in second string

Given a string str and another string patt. Find the character in patt that is present at the minimum index in str. If no character of patt is present in str then print ‘No character present’.

Examples:

Input: str = “geeksforgeeks”, patt = “set”
Output: e
Both e and s of patt are present in str,
but e is present at minimum index, which is 1.

Input: str = “adcffaet”, patt = “onkl”
Output: No character present

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Naive Approach: Using two loops, find the first index of each character of patt in str. Print the character having the minimum index. If no character of patt is present in str then print “No character present”.

## C++

 `// C++ implementation to find the character in  ` `// first string that is present at minimum index ` `// in second string ` `#include ` `using` `namespace` `std; ` ` `  `// function to find the minimum index character ` `void` `printMinIndexChar(string str, string patt) ` `{ ` `    ``// to store the index of character having ` `    ``// minimum index ` `    ``int` `minIndex = INT_MAX; ` ` `  `    ``// lengths of the two strings ` `    ``int` `m = str.size(); ` `    ``int` `n = patt.size(); ` ` `  `    ``// traverse 'patt' ` `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// for each character of 'patt' traverse 'str' ` `        ``for` `(``int` `j = 0; j < m; j++) { ` ` `  `            ``// if patt[i] is found in 'str', check if ` `            ``// it has the minimum index or not. If yes,  ` `            ``// then update 'minIndex' and break ` `            ``if` `(patt[i] == str[j] && j < minIndex) { ` `                ``minIndex = j; ` `                ``break``; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// print the minimum index character ` `    ``if` `(minIndex != INT_MAX) ` `        ``cout << ``"Minimum Index Character = "` `             ``<< str[minIndex]; ` ` `  `    ``// if no character of 'patt' is present in 'str' ` `    ``else` `        ``cout << ``"No character present"``; ` `} ` ` `  `// Driver program to test above ` `int` `main() ` `{ ` `    ``string str = ``"geeksforgeeks"``; ` `    ``string patt = ``"set"``; ` `    ``printMinIndexChar(str, patt); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation to find the character in  ` `// first string that is present at minimum index ` `// in second string ` ` `  `public` `class` `GFG  ` `{ ` `    ``// method to find the minimum index character ` `    ``static` `void` `printMinIndexChar(String str, String patt) ` `    ``{ ` `        ``// to store the index of character having ` `        ``// minimum index ` `        ``int` `minIndex = Integer.MAX_VALUE; ` `      `  `        ``// lengths of the two strings ` `        ``int` `m = str.length(); ` `        ``int` `n = patt.length(); ` `      `  `        ``// traverse 'patt' ` `        ``for` `(``int` `i = ``0``; i < n; i++) { ` `      `  `            ``// for each character of 'patt' traverse 'str' ` `            ``for` `(``int` `j = ``0``; j < m; j++) { ` `      `  `                ``// if patt.charAt(i)is found in 'str', check if ` `                ``// it has the minimum index or not. If yes,  ` `                ``// then update 'minIndex' and break ` `                ``if` `(patt.charAt(i)== str.charAt(j) && j < minIndex) { ` `                    ``minIndex = j; ` `                    ``break``; ` `                ``} ` `            ``} ` `        ``} ` `      `  `        ``// print the minimum index character ` `        ``if` `(minIndex != Integer.MAX_VALUE) ` `            ``System.out.println(``"Minimum Index Character = "` `+ ` `                                ``str.charAt(minIndex)); ` `      `  `        ``// if no character of 'patt' is present in 'str' ` `        ``else` `            ``System.out.println(``"No character present"``); ` `    ``} ` `     `  `    ``// Driver Method ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``String str = ``"geeksforgeeks"``; ` `        ``String patt = ``"set"``; ` `        ``printMinIndexChar(str, patt); ` `    ``} ` `} `

## Python3

 `# Python3 implementation to find the character in ` `# first that is present at minimum index ` `# in second String ` ` `  `# function to find the minimum index character ` `def` `printMinIndexChar(``Str``, patt): ` ` `  `    ``# to store the index of character having ` `    ``# minimum index ` `    ``minIndex ``=` `10``*``*``9` ` `  `    ``# lengths of the two Strings ` `    ``m ``=``len``(``Str``) ` `    ``n ``=``len``(patt) ` ` `  `    ``# traverse 'patt' ` `    ``for` `i ``in` `range``(n): ` ` `  `        ``# for each character of 'patt' traverse 'Str' ` `        ``for` `j ``in` `range``(m): ` ` `  `            ``# if patt[i] is found in 'Str', check if ` `            ``# it has the minimum index or not. If yes, ` `            ``# then update 'minIndex' and break ` `            ``if` `(patt[i] ``=``=` `Str``[j] ``and` `j < minIndex): ` `                ``minIndex ``=` `j ` `                ``break` ` `  ` `  ` `  ` `  `    ``# print the minimum index character ` `    ``if` `(minIndex !``=` `10``*``*``9``): ` `        ``print``(``"Minimum Index Character = "``,``Str``[minIndex]) ` ` `  `    ``# if no character of 'patt' is present in 'Str' ` `    ``else``: ` `        ``print``(``"No character present"``) ` ` `  ` `  `# Driver code ` ` `  `Str` `=` `"geeksforgeeks"` `patt ``=` `"set"` `printMinIndexChar(``Str``, patt) ` ` `  `# This code is contributed by mohit kumar 29 `

## C#

 `// C# implementation to find the character in  ` `// first string that is present at minimum index ` `// in second string ` `using` `System; ` ` `  `class` `GFG ` `{  ` `    ``// method to find the minimum index character ` `    ``static` `void` `printMinIndexChar(String str, String patt) ` `    ``{ ` `        ``// to store the index of character having ` `        ``// minimum index ` `        ``int` `minIndex = ``int``.MaxValue; ` `     `  `        ``// lengths of the two strings ` `        ``int` `m = str.Length; ` `        ``int` `n = patt.Length; ` `     `  `        ``// traverse 'patt' ` `        ``for` `(``int` `i = 0; i < n; i++) { ` `     `  `            ``// for each character of 'patt' traverse 'str' ` `            ``for` `(``int` `j = 0; j < m; j++) { ` `     `  `                ``// if patt.charAt(i)is found in 'str', check if ` `                ``// it has the minimum index or not. If yes,  ` `                ``// then update 'minIndex' and break ` `                ``if` `(patt[i]== str[j] && j < minIndex) { ` `                    ``minIndex = j; ` `                    ``break``; ` `                ``} ` `            ``} ` `        ``} ` `     `  `        ``// print the minimum index character ` `        ``if` `(minIndex != ``int``.MaxValue) ` `            ``Console.WriteLine(``"Minimum Index Character = "` `+ ` `                                ``str[minIndex]); ` `     `  `        ``// if no character of 'patt' is present in 'str' ` `        ``else` `            ``Console.WriteLine(``"No character present"``); ` `    ``} ` `     `  `    ``// Driver Methoda ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``String str = ``"geeksforgeeks"``; ` `        ``String patt = ``"set"``; ` `        ``printMinIndexChar(str, patt); ` `    ``} ` `} ` `// This code is contributed by Sam007 `

Output:

```Minimum Index Character = e
```

Time Complexity: O(mn), where m and n are the length of the two strings.
Auxiliary Space: O(1)

Method 2 Efficient Approach(Hashing):

• Create a hash table with (key, value) tuple represented as (character, index) tuple.
• Store the first index of each character of str in the hash table.
• Now, for each character of patt check if it is present in the hash table or not.
• If present then get its index from the hash table and update minIndex(minimum index encountered so far).
• For no matching character print “No character present”.

Hash table is implemented using unordered_set in C++.

Below image is a dry run of the above approach: Below is the implementation of the above approach:

## C++

 `// C++ implementation to find the character in first  ` `// string that is present at minimum index in second ` `// string ` `#include ` `using` `namespace` `std; ` ` `  `// function to find the minimum index character ` `void` `printMinIndexChar(string str, string patt) ` `{ ` `    ``// unordered_map 'um' implemented as hash table ` `    ``unordered_map<``char``, ``int``> um; ` ` `  `    ``// to store the index of character having ` `    ``// minimum index ` `    ``int` `minIndex = INT_MAX; ` ` `  `    ``// lengths of the two strings ` `    ``int` `m = str.size(); ` `    ``int` `n = patt.size();- ` ` `  `    ``// store the first index of each character of 'str' ` `    ``for` `(``int` `i = 0; i < m; i++) ` `        ``if` `(um.find(str[i]) == um.end()) ` `            ``um[str[i]] = i; ` ` `  `    ``// traverse the string 'patt' ` `    ``for` `(``int` `i = 0; i < n; i++) ` ` `  `        ``// if patt[i] is found in 'um', check if  ` `        ``// it has the minimum index or not accordingly  ` `        ``// update 'minIndex' ` `        ``if` `(um.find(patt[i]) != um.end() &&  ` `            ``um[patt[i]] < minIndex) ` `            ``minIndex = um[patt[i]]; ` ` `  `    ``// print the minimum index character ` `    ``if` `(minIndex != INT_MAX) ` `        ``cout << ``"Minimum Index Character = "` `             ``<< str[minIndex]; ` ` `  `    ``// if no character of 'patt' is present in 'str' ` `    ``else` `        ``cout << ``"No character present"``; ` `} ` ` `  `// Driver program to test above ` `int` `main() ` `{ ` `    ``string str = ``"geeksforgeeks"``; ` `    ``string patt = ``"set"``; ` `    ``printMinIndexChar(str, patt); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation to find the character in  ` `// first string that is present at minimum index ` `// in second string ` ` `  `import` `java.util.HashMap; ` ` `  `public` `class` `GFG  ` `{ ` `    ``// method to find the minimum index character ` `    ``static` `void` `printMinIndexChar(String str, String patt) ` `    ``{ ` `        ``// map to store the first index of each character of 'str' ` `        ``HashMap hm = ``new` `HashMap<>(); ` `         `  `        ``// to store the index of character having ` `        ``// minimum index ` `        ``int` `minIndex = Integer.MAX_VALUE; ` `      `  `        ``// lengths of the two strings ` `        ``int` `m = str.length(); ` `        ``int` `n = patt.length(); ` `      `  `        ``// store the first index of each character of 'str' ` `        ``for` `(``int` `i = ``0``; i < m; i++) ` `            ``if``(!hm.containsKey(str.charAt(i))) ` `                ``hm.put(str.charAt(i),i); ` `      `  `        ``// traverse the string 'patt' ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `            ``// if patt[i] is found in 'um', check if  ` `            ``// it has the minimum index or not accordingly  ` `            ``// update 'minIndex' ` `            ``if` `(hm.containsKey(patt.charAt(i)) &&  ` `                ``hm.get(patt.charAt(i)) < minIndex) ` `                ``minIndex = hm.get(patt.charAt(i)); ` `      `  `        ``// print the minimum index character ` `        ``if` `(minIndex != Integer.MAX_VALUE) ` `            ``System.out.println(``"Minimum Index Character = "` `+ ` `                                ``str.charAt(minIndex)); ` `      `  `        ``// if no character of 'patt' is present in 'str' ` `        ``else` `            ``System.out.println(``"No character present"``); ` `    ``} ` `     `  `    ``// Driver Method ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``String str = ``"geeksforgeeks"``; ` `        ``String patt = ``"set"``; ` `        ``printMinIndexChar(str, patt); ` `    ``} ` `} `

## C#

 `// C# implementation to find the character in  ` `// first string that is present at minimum index ` `// in second string ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG  ` `{ ` `    ``// method to find the minimum index character ` `    ``static` `void` `printMinIndexChar(String str, String patt) ` `    ``{ ` `        ``// map to store the first index of  ` `        ``// each character of 'str' ` `        ``Dictionary<``char``,  ` `                   ``int``> hm = ``new` `Dictionary<``char``,  ` `                                            ``int``>(); ` `         `  `        ``// to store the index of character having ` `        ``// minimum index ` `        ``int` `minIndex = ``int``.MaxValue; ` `     `  `        ``// lengths of the two strings ` `        ``int` `m = str.Length; ` `        ``int` `n = patt.Length; ` `     `  `        ``// store the first index of  ` `        ``// each character of 'str' ` `        ``for` `(``int` `i = 0; i < m; i++) ` `            ``if``(!hm.ContainsKey(str[i])) ` `                ``hm.Add(str[i], i); ` `     `  `        ``// traverse the string 'patt' ` `        ``for` `(``int` `i = 0; i < n; i++) ` `         `  `            ``// if patt[i] is found in 'um',  ` `            ``// check if it has the minimum index  ` `            ``// or not, accordingly update 'minIndex' ` `            ``if` `(hm.ContainsKey(patt[i]) &&  ` `                ``hm[patt[i]] < minIndex) ` `                ``minIndex = hm[patt[i]]; ` `     `  `        ``// print the minimum index character ` `        ``if` `(minIndex != ``int``.MaxValue) ` `            ``Console.WriteLine(``"Minimum Index Character = "` `+ ` `                                             ``str[minIndex]); ` `     `  `        ``// if no character of 'patt' is present in 'str' ` `        ``else` `            ``Console.WriteLine(``"No character present"``); ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``String str = ``"geeksforgeeks"``; ` `        ``String patt = ``"set"``; ` `        ``printMinIndexChar(str, patt); ` `    ``} ` `} ` ` `  `// This code is contributed by Princi Singh `

Output:

```Minimum Index Character = e
```

Time Complexity: O(m + n), where m and n are the lengths of the two strings.
Auxiliary Space: O(d), where d is the size of hash table, which is the count of distinct characters in str.

This article is contributed by Ayush Jauhari. 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.

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.