Find the longest common prefix between two strings after performing swaps on second string - GeeksforGeeks

21 May, 2021
Given two strings and . Find the longest common prefix between them after performing zero or more operations on string . In each operation, you can swap any two letters.Examples:  
Input : a = "here", b = "there"
Output : 4
The 2nd string can be made "heret" by just 
swapping characters and thus the longest
prefix is of length 4.

Input : a = "you", b = "me"
Output : 0
 
Given that we are only allowed to performs swaps in the string and the length of prefix should be maximized. So the idea is to traverse string and check if the frequency of current character in string is same or less of that in string . If yes then move forward in string an otherwise break and print the length of the part of string an up to which a character is matched in string .Below is the implementation of the above approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find the longest// common prefix between two strings// after performing swaps on the second string#include <bits/stdc++.h>using namespace std;   void LengthLCP(string x, string y){          int fr[26]={0};          int a = x.length(); // length of x    int b = y.length(); // length of y          for (int i=0 ;i<b ; i++)    {        // creating frequency array of        // characters of y        fr[y[i] - 97] += 1;    }    // storing the length of    // longest common prefix    int c = 0;          for (int i=0 ;i<a ; i++)    {        // checking if the frequency of the character at        // position i in x in b is greater than zero or not        // if zero we increase the prefix count by 1        if (fr[x[i] - 97] > 0){            c += 1;            fr[x[i] - 97] -= 1;        }        else            break;    }    cout<<(c)<<endl;}// Driver Codeint main(){string x="here", y =  "there";  LengthLCP(x, y); return 0;}//contributed by Arnab Kundu
// Java program to find the longest// common prefix between two strings// after performing swaps on the second string public class GFG {     static void LengthLCP(String x, String y)    {                  int fr[]=new int [26];                  int a = x.length(); // length of x        int b = y.length(); // length of y                  for (int i=0 ;i<b ; i++)        {            // creating frequency array of            // characters of y            fr[y.charAt(i) - 97] += 1;        }        // storing the length of        // longest common prefix        int c = 0;                  for (int i=0 ;i<a ; i++)        {            // checking if the frequency of the character at            // position i in x in b is greater than zero or not            // if zero we increase the prefix count by 1            if (fr[x.charAt(i) - 97] > 0){                c += 1;                fr[x.charAt(i) - 97] -= 1;            }            else                break;        }        System.out.println((c)) ;    }      public static void main(String args[])    {        String x="here", y =  "there";                  LengthLCP(x, y);      }    // This code is contributed by ANKITRAI1}  
# Python program to find the longest# common prefix between two strings# after performing swaps on the second string def LengthLCP(x, y):    fr = [0] * 26         a = len(x) # length of x    b = len(y) # length of y         for i in range(b):        # creating frequency array of        # characters of y        fr[ord(y[i]) - 97] += 1         # storing the length of    # longest common prefix    c = 0         for i in range(a):        # checking if the frequency of the character at        # position i in x in b is greater than zero or not        # if zero we increase the prefix count by 1        if (fr[ord(x[i]) - 97] > 0):            c += 1            fr[ord(x[i]) - 97] -= 1        else:            break    print(c) # Driver Code x, y = "here", "there" LengthLCP(x, y)
// C# program to find the longest// common prefix between two strings// after performing swaps on the// second stringusing System; class GFG{ static void LengthLCP(String x, String y){    int []fr = new int [26];         int a = x.Length; // length of x    int b = y.Length; // length of y         for (int i = 0 ; i < b; i++)    {        // creating frequency array        // of characters of y        fr[y[i] - 97] += 1;    }         // storing the length of    // longest common prefix    int c = 0;         for (int i = 0 ; i < a; i++)    {        // checking if the frequency of        // the character at position i        // in x in b is greater than zero        // or not if zero we increase the        // prefix count by 1        if (fr[x[i] - 97] > 0)        {            c += 1;            fr[x[i] - 97] -= 1;        }        else            break;    }    Console.Write((c)) ;} // Driver Codepublic static void Main(){    String x = "here", y = "there";         LengthLCP(x, y);}} // This code is contributed by 29AjayKumar
<?php// PHP program to find the longest// common prefix between two strings// after performing swaps on the second string function LengthLCP($x, $y){          $fr = array_fill(0,26,NULL);         $a = strlen($x); // length of x    $b = strlen($y); // length of y         for ($i = 0 ;$i < $b ; $i++)    {        // creating frequency array of        // characters of y        $fr[ord($y[$i]) - 97] += 1;    }         // storing the length of    // longest common prefix    $c = 0;         for ($i = 0 ;$i < $a ; $i++)    {        // checking if the frequency of the character at        // position i in x in b is greater than zero or not        // if zero we increase the prefix count by 1        if ($fr[ord($x[$i]) - 97] > 0)        {            $c += 1;            $fr[ord($x[$i]) - 97] -= 1;        }        else            break;    }    echo $c;} // Driver Code$x="here";$y = "there"; LengthLCP($x, $y); return 0; // This code is contributed by ChitraNayal?>
<script> // JavaScript program to find the long// common prefix between two strings// after performing swaps on the second string     function LengthLCP(x, y)    {                      let fr = Array(26).fill(0);                    let a = x.length; // length of x        let b = y.length; // length of y                    for (let i=0 ;i<b ; i++)        {            // creating frequency array of            // characters of y            fr[y[i].charCodeAt() - 97] += 1;        }        // storing the length of        // longest common prefix        let c = 0;                    for (let i=0 ;i<a ; i++)        {            // checking if the            // frequency of the character at            // position i in x in b is greater            // than zero or not            // if zero we increase the            // prefix count by 1            if (fr[x[i].charCodeAt() - 97] > 0){                c += 1;                fr[x[i].charCodeAt() - 97] -= 1;            }            else                break;        }        document.write((c)) ;    }  // driver code     let x="here", y =  "there";                    LengthLCP(x, y);   </script>
4
 
andrew1234
ankthon
29AjayKumar
ukasp
target_2
frequency-counting
Longest Common Prefix
prefix
Greedy
Python
Greedy
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Split the given array into K sub-arrays such that maximum sum of all sub arrays is minimum
Program for First Fit algorithm in Memory Management
Optimal Page Replacement Algorithm
Program for Best Fit algorithm in Memory Management
Bin Packing Problem (Minimize number of used Bins)
Read JSON file using Python
Adding new column to existing DataFrame in Pandas
Python map() function
How to get column names in Pandas dataframe