Longest string which is prefix string of at least two strings
Last Updated :
23 Feb, 2023
Given a set of strings of the same length, we need to find the length of the longest string, which is a prefix string of at least two strings.
Examples:
Input: ["abcde", "abcsd", "bcsdf", "abcda", "abced"]
Output: 4
Explanation:
Longest prefix string is "abcd".
Input: ["pqrstq", "pwxyza", "abcdef", "pqrstu"]
Output: 5
Approach:
- Starting from the 0th position, iterate over every character and check if that character occurs in at least two of the strings at the current position or not.
- If it occurs, then recursively call on the next position. Otherwise,
- Update the max value by taking the current maximum with Current_position – 1.
- Finally, return the max value.
C++
#include<bits/stdc++.h>
using namespace std;
int max1=0;
int MaxLength(vector<string> v, int i,
int m)
{
if (i>=m)
{
return m-1;
}
for ( int k = 0; k < 26; k++)
{
char c = 'a' + k;
vector<string> v1;
for ( int j = 0; j < v.size(); j++)
{
if (v[j][i] == c)
{
v1.push_back(v[j]);
}
}
if (v1.size()>=2)
{
max1=max(max1,
MaxLength(v1, i+1, m));
}
else
{
max1=max(max1, i - 1);
}
}
return max1;
}
int main()
{
string s1, s2, s3, s4, s5;
s1 = "abcde" ;
s2 = "abcsd" ;
s3 = "bcsdf" ;
s4 = "abcda" ;
s5 = "abced" ;
vector<string> v;
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
v.push_back(s5);
int m = v[0].size();
cout<<MaxLength(v, 0, m) + 1<<endl;
return 0;
}
|
Java
import java.util.*;
class GFG{
static int max1 = 0 ;
static int MaxLength(Vector<String> v,
int i, int m)
{
if (i>=m)
{
return m- 1 ;
}
for ( int k = 0 ; k < 26 ; k++)
{
char c = ( char )( 'a' + k);
Vector<String> v1 = new Vector<String>();
for ( int j = 0 ; j < v.size(); j++)
{
if (v.get(j).charAt(i) == c)
{
v1.add(v.get(j));
}
}
if (v1.size() >= 2 )
{
max1=Math.max(max1,
MaxLength(v1, i + 1 , m));
}
else
{
max1=Math.max(max1, i - 1 );
}
}
return max1;
}
public static void main(String[] args)
{
String s1, s2, s3, s4, s5;
s1 = "abcde" ;
s2 = "abcsd" ;
s3 = "bcsdf" ;
s4 = "abcda" ;
s5 = "abced" ;
Vector<String> v = new Vector<String>();
v.add(s1);
v.add(s2);
v.add(s3);
v.add(s4);
v.add(s5);
int m = v.get( 0 ).length();
System.out.print(MaxLength(v, 0 , m) + 1 );
}
}
|
Python3
max1 = 0
def MaxLength(v, i, m):
global max1
if (i > = m):
return m - 1
for k in range ( 26 ):
c = chr ( ord ( 'a' ) + k)
v1 = []
for j in range ( len (v)):
if (v[j][i] = = c):
v1.append(v[j])
if ( len (v1) > = 2 ):
max1 = max (max1, MaxLength(v1, i + 1 , m))
else :
max1 = max (max1, i - 1 )
return max1
if __name__ = = '__main__' :
s1 = "abcde"
s2 = "abcsd"
s3 = "bcsdf"
s4 = "abcda"
s5 = "abced"
v = []
v.append(s1)
v.append(s2)
v.append(s3)
v.append(s4)
v.append(s5)
m = len (v[ 0 ])
print (MaxLength(v, 0 , m) + 1 )
|
C#
using System;
using System.Collections.Generic;
class GFG{
static int max1 = 0;
static int MaxLength(List<String> v,
int i, int m)
{
if (i >= m)
{
return m - 1;
}
for ( int k = 0; k < 26; k++)
{
char c = ( char )( 'a' + k);
List<String> v1 = new List<String>();
for ( int j = 0; j < v.Count; j++)
{
if (v[j][i] == c)
{
v1.Add(v[j]);
}
}
if (v1.Count >= 2)
{
max1 = Math.Max(max1,
MaxLength(v1, i + 1, m));
}
else
{
max1 = Math.Max(max1, i - 1);
}
}
return max1;
}
public static void Main(String[] args)
{
String s1, s2, s3, s4, s5;
s1 = "abcde" ;
s2 = "abcsd" ;
s3 = "bcsdf" ;
s4 = "abcda" ;
s5 = "abced" ;
List<String> v = new List<String>();
v.Add(s1);
v.Add(s2);
v.Add(s3);
v.Add(s4);
v.Add(s5);
int m = v[0].Length;
Console.Write(MaxLength(v, 0, m) + 1);
}
}
|
Javascript
<script>
let max1=0;
function MaxLength(v, i, m)
{
if (i>=m)
{
return m-1;
}
for (let k = 0; k < 26; k++)
{
let c = String.fromCharCode( 'a' .charCodeAt(0) + k);
let v1 = [];
for (let j = 0; j < v.length; j++)
{
if (v[j][i] == c)
{
v1.push(v[j]);
}
}
if (v1.length >= 2)
{
max1 = Math.max(max1, MaxLength(v1, i+1, m));
}
else
{
max1 = Math.max(max1, i - 1);
}
}
return max1;
}
let s1, s2, s3, s4, s5;
s1 = "abcde" ;
s2 = "abcsd" ;
s3 = "bcsdf" ;
s4 = "abcda" ;
s5 = "abced" ;
let v = [];
v.push(s1);
v.push(s2);
v.push(s3);
v.push(s4);
v.push(s5);
let m = v[0].length;
document.write(MaxLength(v, 0, m) + 1 + "<br>" );
</script>
|
Time Complexity: O(N*26)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...