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++ program to find maximum // length prefix of one string // occur as subsequence in another // string. #include<bits/stdc++.h> 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 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 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# 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 // PHP program to find maximum // length prefix of one string // occur as subsequence in another // string. // Return the maximum length // prefix which is subsequence. function maxPrefix( $s , $t )
{ $count = 0;
// Iterating string T.
for ( $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 ;
} // Driver Code { $S = "digger" ;
$T = "biggerdiagram" ;
echo maxPrefix( $S , $T ) ;
return 0;
} // This code is contributed by nitin mittal. ?> |
<script> // JavaScript program to find maximum // length prefix of one string // occur as subsequence in another // string. // Return the maximum length
// prefix which is subsequence.
function maxPrefix(s,t)
{
let count = 0;
// Iterating string T.
for (let 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 let S = "digger" ;
let T = "biggerdiagram" ;
document.write(maxPrefix(S, T));
</script> |
3
Time complexity: O(n)
Space complexity: O(1)