Related Articles
Find largest word in dictionary by deleting some characters of given string
• Difficulty Level : Easy
• Last Updated : 06 Nov, 2020

Giving a dictionary and a string ‘str’, find the longest string in dictionary which can be formed by deleting some characters of the given ‘str’.

Examples:

```Input : dict = {"ale", "apple", "monkey", "plea"}
str = "abpcplea"
Output : apple

Input  : dict = {"pintu", "geeksfor", "geeksgeeks",
" forgeek"}
str = "geeksforgeeks"
Output : geeksgeeks
```

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

This problem reduces to finding if a string is subsequence of another string or not. We traverse all dictionary words and for every word, we check if it is subsequence of given string and is largest of all such words. We finally return the longest word with given string as subsequence.

Below is the implementation of above idea

## C++

 `// C++ program to find largest word in Dictionary ` `// by deleting some characters of given string ` `#include ` `using` `namespace` `std; ` ` `  `// Returns true if str1[] is a subsequence of str2[]. ` `// m is length of str1 and n is length of str2 ` `bool` `isSubSequence(string str1, string str2) ` `{ ` `    ``int` `m = str1.length(), n = str2.length(); ` ` `  `    ``int` `j = 0; ``// For index of str1 (or subsequence ` ` `  `    ``// Traverse str2 and str1, and compare current ` `    ``// character of str2 with first unmatched char ` `    ``// of str1, if matched then move ahead in str1 ` `    ``for` `(``int` `i=0; i dict, string str) ` `{ ` `    ``string result = ``""``; ` `    ``int` `length = 0; ` ` `  `    ``// Traverse through all words of dictionary ` `    ``for` `(string word : dict) ` `    ``{ ` `        ``// If current word is subsequence of str and is largest ` `        ``// such word so far. ` `        ``if` `(length < word.length() && isSubSequence(word, str)) ` `        ``{ ` `            ``result = word; ` `            ``length = word.length(); ` `        ``} ` `    ``} ` ` `  `    ``// Return longest string ` `    ``return` `result; ` `} ` ` `  `// Driver program to test above function ` `int` `main() ` `{ ` `    ``vector dict = {``"ale"``, ``"apple"``, ``"monkey"``, ``"plea"``}; ` `    ``string str = ``"abpcplea"` `; ` `    ``cout << findLongestString(dict, str) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find largest ` `// word in Dictionary by deleting ` `// some characters of given String ` ` `  `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` ` `  `    ``// Returns true if str1[] is a  ` `    ``// subsequence of str2[]. m is  ` `    ``// length of str1 and n is length of str2  ` `    ``static` `boolean` `isSubSequence(String str1, ` `                                ``String str2)  ` `    ``{ ` `        ``int` `m = str1.length(), n = str2.length(); ` ` `  `        ``int` `j = ``0``; ``// For index of str1 (or subsequence)  ` ` `  `        ``// Traverse str2 and str1, and compare current  ` `        ``// character of str2 with first unmatched char  ` `        ``// of str1, if matched then move ahead in str1  ` `        ``for` `(``int` `i = ``0``; i < n && j < m; i++) ` `        ``{ ` `            ``if` `(str1.charAt(j) == str2.charAt(i))  ` `            ``{ ` `                ``j++; ` `            ``} ` `        ``} ` ` `  `        ``// If all characters of str1  ` `        ``// were found in str2  ` `        ``return` `(j == m); ` `    ``} ` ` `  `// Returns the longest String  ` `// in dictionary which is a  ` `// subsequence of str.  ` `    ``static` `String findLongestString(Vector dict,  ` `                                            ``String str) ` `    ``{ ` `        ``String result = ``""``; ` `        ``int` `length = ``0``; ` ` `  `        ``// Traverse through all words of dictionary  ` `        ``for` `(String word : dict) ` `        ``{ ` `             `  `            ``// If current word is subsequence of str  ` `            ``// and is largest such word so far.  ` `            ``if` `(length < word.length() && ` `                ``isSubSequence(word, str)) ` `            ``{ ` `                ``result = word; ` `                ``length = word.length(); ` `            ``} ` `        ``} ` ` `  `        ``// Return longest String  ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `        ``String[] arr = {``"ale"``, ``"apple"``, ``"monkey"``, ``"plea"``}; ` `        ``Vector dict = ``new` `Vector(Arrays.asList(arr)); ` `        ``String str = ``"abpcplea"``; ` `        ``System.out.println(findLongestString(dict, str)); ` `    ``} ` `}  ` ` `  `// This code is contributed by 29AjayKumar `

## Python3

 `# Python3 program to find largest word in Dictionary ` `# by deleting some characters of given string ` ` `  `# Returns true if str1[] is a subsequence of str2[]. ` `# m is length of str1 and n is length of str2 ` `def` `isSubSequence(str1, str2): ` ` `  `    ``m ``=` `len``(str1); ` `    ``n ``=` `len``(str2); ` ` `  `    ``j ``=` `0``; ``# For index of str1 (or subsequence ` ` `  `    ``# Traverse str2 and str1, and compare current ` `    ``# character of str2 with first unmatched char ` `    ``# of str1, if matched then move ahead in str1 ` `    ``i ``=` `0``; ` `    ``while` `(i < n ``and` `j < m): ` `        ``if` `(str1[j] ``=``=` `str2[i]): ` `            ``j ``+``=` `1``; ` `        ``i ``+``=` `1``; ` ` `  `    ``# If all characters of str1 were found in str2 ` `    ``return` `(j ``=``=` `m); ` ` `  `# Returns the longest string in dictionary which is a ` `# subsequence of str. ` `def` `findLongestString(dict1, str1): ` `    ``result ``=` `""; ` `    ``length ``=` `0``; ` ` `  `    ``# Traverse through all words of dictionary ` `    ``for` `word ``in` `dict1: ` `         `  `        ``# If current word is subsequence of str and is largest ` `        ``# such word so far. ` `        ``if` `(length < ``len``(word) ``and` `isSubSequence(word, str1)): ` `            ``result ``=` `word; ` `            ``length ``=` `len``(word); ` ` `  `    ``# Return longest string ` `    ``return` `result; ` ` `  `# Driver program to test above function ` ` `  `dict1 ``=` `[``"ale"``, ``"apple"``, ``"monkey"``, ``"plea"``]; ` `str1 ``=` `"abpcplea"` `; ` `print``(findLongestString(dict1, str1)); ` `     `  `# This code is conribued by mits `

## C#

 `// C# program to find largest ` `// word in Dictionary by deleting ` `// some characters of given String ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG ` `{ ` ` `  `    ``// Returns true if str1[] is a  ` `    ``// subsequence of str2[]. m is  ` `    ``// length of str1 and n is length of str2  ` `    ``static` `bool` `isSubSequence(String str1, ` `                                ``String str2)  ` `    ``{ ` `        ``int` `m = str1.Length, n = str2.Length; ` ` `  `        ``int` `j = 0; ``// For index of str1 (or subsequence)  ` ` `  `        ``// Traverse str2 and str1, and compare current  ` `        ``// character of str2 with first unmatched char  ` `        ``// of str1, if matched then move ahead in str1  ` `        ``for` `(``int` `i = 0; i < n && j < m; i++) ` `        ``{ ` `            ``if` `(str1[j] == str2[i])  ` `            ``{ ` `                ``j++; ` `            ``} ` `        ``} ` ` `  `        ``// If all characters of str1  ` `        ``// were found in str2  ` `        ``return` `(j == m); ` `    ``} ` ` `  `    ``// Returns the longest String  ` `    ``// in dictionary which is a  ` `    ``// subsequence of str.  ` `    ``static` `String findLongestString(List dict,  ` `                                            ``String str) ` `    ``{ ` `        ``String result = ``""``; ` `        ``int` `length = 0; ` ` `  `        ``// Traverse through all words of dictionary  ` `        ``foreach` `(String word ``in` `dict) ` `        ``{ ` `             `  `            ``// If current word is subsequence of str  ` `            ``// and is largest such word so far.  ` `            ``if` `(length < word.Length && ` `                ``isSubSequence(word, str)) ` `            ``{ ` `                ``result = word; ` `                ``length = word.Length; ` `            ``} ` `        ``} ` ` `  `        ``// Return longest String  ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args)  ` `    ``{ ` `        ``String[] arr = {``"ale"``, ``"apple"``, ``"monkey"``, ``"plea"``}; ` `        ``List dict = ``new` `List(arr); ` `        ``String str = ``"abpcplea"``; ` `        ``Console.WriteLine(findLongestString(dict, str)); ` `    ``} ` `}  ` ` `  `// This code contributed by Rajput-Ji `

## PHP

 ` `

Output:

```apple
```

Time Complexity : O(N*K*n) Here N is the length of dictionary and n is the length of given string ‘str’ and K – maximum length of words in the dictionary.

Auxiliary Space : O(1)

This article is contributed by Nishant Singh. 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.