Open in App
Not now

# Maximum length prefix of one string that occurs as subsequence in another

• Difficulty Level : Easy
• Last Updated : 20 Feb, 2023

Given two strings s and t. The task is to find maximum length of some prefix of the string S which occur in string t as subsequence.

Examples :

```Input : s = "digger"
t = "biggerdiagram"
Output : 3
digger
biggerdiagram
Prefix "dig" of s is longest subsequence in t.

Input : s = "geeksforgeeks"
t = "agbcedfeitk"
Output : 4```

A simple solutions is to consider all prefixes one by one and check if current prefix of s[] is a subsequence of t[] or not. Finally return length of the largest prefix.

An efficient solution is based on the fact that to find a prefix of length n, we must first find the prefix of length n – 1 and then look for s[n-1] in t. Similarly, to find a prefix of length n – 1, we must first find the prefix of length n – 2 and then look for s[n – 2] and so on.
Thus, we keep a counter which stores the current length of prefix found. We initialize it with 0 and begin with the first letter of s and keep iterating over t to find the occurrence of the first letter. As soon as we encounter the first letter of s we update the counter and look for second letter. We keep updating the counter and looking for next letter, until either the string s is found or there are no more letters in t.

Below is the implementation of this approach:

## C++

 `// C++ program to find maximum ` `// length prefix of one string ` `// occur as subsequence in another` `// string.` `#include` `using` `namespace` `std;`   `// Return the maximum length ` `// prefix which is subsequence.` `int` `maxPrefix(``char` `s[], ``char` `t[])` `{` `    ``int` `count = 0;`   `    ``// Iterating string T.` `    ``for` `(``int` `i = 0; i < ``strlen``(t); i++)` `    ``{` `        ``// If end of string S.` `        ``if` `(count == ``strlen``(s))` `            ``break``;`   `        ``// If character match, ` `        ``// increment counter.` `        ``if` `(t[i] == s[count])` `            ``count++;` `    ``}`   `    ``return` `count;` `}`   `// Driven Code` `int` `main()` `{` `    ``char` `S[] = ``"digger"``;` `    ``char` `T[] = ``"biggerdiagram"``;`   `    ``cout << maxPrefix(S, T) ` `         ``<< endl;`   `    ``return` `0;` `}`

## Java

 `// Java program to find maximum` `// length prefix of one string ` `// occur as subsequence in another` `// string.` `public` `class` `GFG {     ` `    `  `    ``// Return the maximum length ` `    ``// prefix which is subsequence.` `    ``static` `int` `maxPrefix(String s, ` `                         ``String t)` `    ``{` `        ``int` `count = ``0``;` `    `  `        ``// Iterating string T.` `        ``for` `(``int` `i = ``0``; i < t.length(); i++)` `        ``{` `            ``// If end of string S.` `            ``if` `(count == s.length())` `                ``break``;` `    `  `            ``// If character match,  ` `            ``// increment counter.` `            ``if` `(t.charAt(i) == s.charAt(count))` `                ``count++;` `        ``}` `    `  `        ``return` `count;` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `main(String args[])` `    ``{` `        ``String S = ``"digger"``;` `        ``String T = ``"biggerdiagram"``;` `    `  `        ``System.out.println(maxPrefix(S, T));` `    ``}` `}` `// This code is contributed by Sumit Ghosh`

## Python 3

 `# Python 3 program to find maximum ` `# length prefix of one string occur` `# as subsequence in another string.`     `# Return the maximum length ` `# prefix which is subsequence.` `def` `maxPrefix(s, t) :` `    ``count ``=` `0`   `    ``# Iterating string T.` `    ``for` `i ``in` `range``(``0``,``len``(t)) :` `        `  `        ``# If end of string S.` `        ``if` `(count ``=``=` `len``(s)) :` `            ``break`   `        ``# If character match, ` `        ``# increment counter.` `        ``if` `(t[i] ``=``=` `s[count]) :` `            ``count ``=` `count ``+` `1` `            `    `    ``return` `count`     `# Driver Code` `S ``=` `"digger"` `T ``=` `"biggerdiagram"`   `print``(maxPrefix(S, T))`     `# This code is contributed` `# by Nikita Tiwari.`

## C#

 `// C# program to find maximum ` `// length prefix of one string` `// occur as subsequence in ` `// another string.` `using` `System;`   `class` `GFG ` `{     ` `    `  `    ``// Return the maximum length prefix ` `    ``// which is subsequence.` `    ``static` `int` `maxPrefix(String s, ` `                         ``String t)` `    ``{` `        ``int` `count = 0;` `    `  `        ``// Iterating string T.` `        ``for` `(``int` `i = 0; i < t.Length; i++)` `        ``{` `            ``// If end of string S.` `            ``if` `(count == s.Length)` `                ``break``;` `    `  `            ``// If character match, ` `            ``// increment counter.` `            ``if` `(t[i] == s[count])` `                ``count++;` `        ``}` `    `  `        ``return` `count;` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `Main()` `    ``{` `        ``String S = ``"digger"``;` `        ``String T = ``"biggerdiagram"``;` `    `  `        ``Console.Write(maxPrefix(S, T));` `    ``}` `}`   `// This code is contributed by nitin mittal`

## PHP

 ``

## Javascript

 ``

Output

`3`

Time complexity: O(n)

Space complexity: O(1)

This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up
Related Articles