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

Given two strings and . Find the longest common prefix between them after performing zero or more operation 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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 otherwise break and print the length of the part of string a up to which a character is matched in string .

Below is the implementation of the above approach:

## C++

 `// C++ program to find the longest ` `// common prefix between two strings  ` `// after performing swaps on the second string ` `#include ` `using` `namespace` `std; ` ` `  `  `  `void` `LengthLCP(string x, string y) ` `{ ` `     `  ` `  `    ``int` `fr={0}; ` `      `  `    ``int` `a = x.length(); ``// length of x ` `    ``int` `b = y.length(); ``// length of y ` `      `  `    ``for` `(``int` `i=0 ;i 0){ ` `            ``c += 1; ` `            ``fr[x[i] - 97] -= 1; ` `        ``} ` `        ``else` `            ``break``; ` `    ``} ` `    ``cout<<(c)<

## Java

 `// 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 ``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 ` `} ` `  `

## Python3

 `# 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#

 `// C# program to find the longest  ` `// common prefix between two strings  ` `// after performing swaps on the  ` `// second string ` `using` `System; ` ` `  `class` `GFG  ` `{  ` ` `  `static` `void` `LengthLCP(String x, String y)  ` `{  ` `    ``int` `[]fr = ``new` `int` `;  ` `     `  `    ``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 Code ` `public` `static` `void` `Main()  ` `{  ` `    ``String x = ``"here"``, y = ``"there"``;  ` `     `  `    ``LengthLCP(x, y);  ` `}  ` `}  ` ` `  `// This code is contributed by 29AjayKumar `

## PHP

 ` 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 ` `?> `

Output:

```4
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.