Longest Common Prefix Matching | Set-6

Given a set of strings, find the longest common prefix.

Examples:

Input: str[] = {geeksforgeeks, geeks, geek, geezer}
Output: gee

Input: str[] = {apple, ape, april}
Output: ap

Previous Approaches: Set1 | Set2 | Set3 | Set4 | Set5



Approach:

  • Sort the given set of N strings.
  • Compare the first and last string in the sorted array of strings.
  • The string with prefix characters matching in the first and last string will be the answer.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// A C++ Program to find the longest common prefix
#include <bits/stdc++.h>
using namespace std;
  
// A Utility Function to find the common prefix between
// first and last strings
string commonPrefixUtil(string str1, string str2)
{
    string result;
    int n1 = str1.length(), n2 = str2.length();
  
    // Compare str1 and str2
    for (int i = 0, j = 0; i <= n1 - 1 && j <= n2 - 1; i++, j++) {
        if (str1[i] != str2[j])
            break;
        result.push_back(str1[i]);
    }
  
    return (result);
}
  
// A Function that returns the longest common prefix
// from the array of strings
void commonPrefix(string arr[], int n)
{
    // sorts the N set of strings
    sort(arr, arr + n);
  
    // prints the common prefix of the first and the
    // last string of the set of strings
    cout << commonPrefixUtil(arr[0], arr[n - 1]);
}
  
// Driver Code
int main()
{
    string arr[] = { "geeksforgeeks", "geeks",
                     "geek", "geezer" };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    commonPrefix(arr, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// A Java program to find the longest common prefix 
  
import java.util.Arrays;
  
class GFG {
  
// A Utility Function to find the common prefix between 
// first and last strings 
    static String commonPrefixUtil(String str1, String str2) {
        String result = "";
        int n1 = str1.length(), n2 = str2.length();
  
        // Compare str1 and str2 
        for (int i = 0, j = 0; i <= n1 - 1 && j <= n2 - 1; i++, j++) {
            if (str1.charAt(i) != str2.charAt(j)) {
                break;
            }
            result += str1.charAt(i);
        }
  
        return (result);
    }
  
// A Function that returns the longest common prefix 
// from the array of strings 
    static void commonPrefix(String arr[], int n) {
        // sorts the N set of strings 
        Arrays.sort(arr);
  
        // prints the common prefix of the first and the 
        // last String of the set of strings 
        System.out.println(commonPrefixUtil(arr[0], arr[n - 1]));
    }
  
// Driver Code 
    public static void main(String[] args) {
        String arr[] = {"geeksforgeeks", "geeks",
            "geek", "geezer"};
        int n = arr.length;
  
        commonPrefix(arr, n);
  
    }
}
/* This JAVA code is contributed by 29AjayKumar*/

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# A Python 3 Program to find the 
# longest common prefix
  
# A Utility Function to find the common 
# prefix between first and last strings
def commonPrefixUtil(str1, str2):
    n1 = len(str1)
    n2 = len(str2)
      
    result = ""
      
    # Compare str1 and str2
    j = 0
    i = 0
    while(i <= n1 - 1 and j <= n2 - 1):
        if (str1[i] != str2[j]):
            break
        result += (str1[i])
          
        i += 1
        j += 1
  
    return (result)
  
# A Function that returns the longest 
# common prefix from the array of strings
def commonPrefix(arr, n):
      
    # sorts the N set of strings
    arr.sort(reverse = False)
  
    # prints the common prefix of the first 
    # and the last string of the set of strings
    print(commonPrefixUtil(arr[0], arr[n - 1]))
  
# Driver Code
if __name__ == '__main__':
    arr = ["geeksforgeeks", "geeks",
                    "geek", "geezer"]
    n = len(arr)
  
    commonPrefix(arr, n)
      
# This code is contributed by
# Sanjit_Prasad

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# Program to find the longest 
// common prefix 
using System;
  
class GFG
{
// A Utility Function to find the common 
// prefix between first and last strings 
static String commonPrefixUtil(String str1, 
                               String str2) 
{
    string result = ""
    int n1 = str1.Length, n2 = str2.Length; 
      
    // Compare str1 and str2 
    for (int i = 0, j = 0; 
             i <= n1 - 1 && j <= n2 - 1; i++, j++) 
    
        if (str1[i] != str2[j]) 
            break
        result += (str1[i]); 
    
      
    return (result);
}
  
// A Function that returns the longest 
// common prefix from the array of strings 
static void commonPrefix(String []arr, int n)
{
    // sorts the N set of strings 
    Array.Sort(arr);
  
    // prints the common prefix of the first 
    // and the last String of the set of strings 
    Console.Write(commonPrefixUtil(arr[0], 
                                   arr[n - 1]));
}
  
// Driver Code 
public static void Main() 
{
    String []arr = {"geeksforgeeks", "geeks",
                    "geek", "geezer"};
    int n = arr.Length;
    commonPrefix(arr, n);
}
}
  
// This code is contributed by 29AjayKumar

chevron_right


PHP

Output:

gee

Time Complexity: O(N * log N)



My Personal Notes arrow_drop_up

A Curious Mind

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.