# Longest prefix that contains same number of X and Y in an array

Given two positive integers X and Y, and an array arr[] of positive integers. We need to find the longest prefix index which contains an equal number of X and Y. Print the maximum index of largest prefix if exist otherwise print -1.

Examples:

```Input : array[] = [7, 42, 5, 6, 42, 8, 7, 5, 3, 6, 7]
X = 7 Y = 42
Output : 9
The longest prefix with same number of occurrences
of 7 and 42 is:
7, 42, 5, 6, 42, 8, 7, 5, 3, 6 42
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

We start from the index 0 and run a loop till the end of array. We keep increasing counters for both numbers X and Y. After iterating over the whole array, the last index when counts of X and y were equal is our result.

Below is the implementation of above idea :

## C++

 `// C++ program to find longest prefix with ` `// equal numbers of X and Y. ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find the max index of largest ` `// prefix with same number if X and Y ` `int` `findIndex(``int` `arr[], ``int` `X, ``int` `Y, ``int` `n) ` `{ ` `    ``// counters for X and Y ` `    ``int` `nx = 0,ny = 0; ` ` `  `    ``int` `result = -1; ` `    ``for` `(``int` `i=0; i

## Java

 `// Java program to find longest  ` `// prefix with equal numbers ` `// of X and Y. ` `import` `java.io.*; ` ` `  `public` `class` `GFG ` `{ ` `     `  `// Function to find the max index  ` `// of largest prefix with same ` `// number if X and Y ` `static` `int` `findIndex(``int` `[]arr, ``int` `X, ` `                     ``int` `Y, ``int` `n) ` `{ ` `     `  `    ``// counters for X and Y ` `    ``int` `nx = ``0``, ny = ``0``; ` ` `  `    ``int` `result = -``1``; ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `    ``{ ` `        ``// If value is equal to X  ` `        ``// increment counter of X ` `        ``if` `(arr[i] == X) ` `            ``nx++; ` ` `  `        ``// If value is equal to Y ` `        ``// increment counter of Y ` `        ``if` `(arr[i] == Y) ` `            ``ny++; ` ` `  `        ``// If counters are equal(but not ` `        ``// zero) save the result as i ` `        ``if` `((nx != ``0``) && (nx == ny)) ` `            ``result = i; ` `    ``} ` `     `  `    ``return` `result; ` `} ` ` `  `    ``// Driver code ` `    ``static` `public` `void` `main (String[] args) ` `    ``{ ` `    ``int` `[]arr = {``7``, ``42``, ``5``, ``6``, ``42``, ``8``,  ` `                 ``7``, ``5``, ``3``, ``6``, ``7``}; ` `    ``int` `X = ``7``, Y = ``42``; ` `    ``int` `n = arr.length; ` `    ``System.out.println(``"Ending index of prefix is "` `        ``+ findIndex(arr, X, Y, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m.  ` `// Improved by Qu Dongfang. `

## Python3

 `# Python 3 program to find longest prefix  ` `# with equal numbers of X and Y. ` ` `  `# Function to find the max index of ` `# largest prefix with same number ` `# if X and Y ` `def` `findIndex(arr, X, Y, n): ` `     `  `    ``# counters for X and Y ` `    ``nx ``=` `0` `    ``ny ``=` `0` ` `  `    ``result ``=` `-``1` `    ``for` `i ``in` `range``(n): ` `         `  `        ``# If value is equal to X increment  ` `        ``# counter of X ` `        ``if` `arr[i] ``=``=` `X: ` `            ``nx ``+``=` `1` ` `  `        ``# If value is equal to Y increment  ` `        ``# counter of Y ` `        ``if` `arr[i] ``=``=` `Y: ` `            ``ny ``+``=` `1` ` `  `        ``# If counters are equal(but not zero) ` `        ``# save the result as i ` `        ``if` `nx ``and` `(nx ``=``=` `ny): ` `            ``result ``=` `i ` ` `  `    ``return` `result ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``arr ``=` `[``7``, ``42``, ``5``, ``6``, ``42``, ``8``, ``7``, ``5``, ``3``, ``6``, ``7``] ` `    ``X ``=` `7` `    ``Y ``=` `42` `    ``n ``=` `len``(arr) ` `    ``print``(``"Ending index of prefix is"``, ` `              ``findIndex(arr, X, Y, n)) ` ` `  `# This code is contributed by ` `# Sanjit_Prasad ` `# Improved by Qu Dongfang. `

## C#

 `// C# program to find longest  ` `// prefix with equal numbers ` `// of X and Y. ` `using` `System; ` ` `  `public` `class` `GFG ` `{ ` `     `  `// Function to find the max index  ` `// of largest prefix with same ` `// number if X and Y ` `static` `int` `findIndex(``int` `[]arr, ``int` `X, ` `                     ``int` `Y, ``int` `n) ` `{ ` `     `  `    ``// counters for X and Y ` `    ``int` `nx = 0, ny = 0; ` ` `  `    ``int` `result = -1; ` `    ``for` `(``int` `i = 0; i < n; i++) ` `    ``{ ` `        ``// If value is equal to X  ` `        ``// increment counter of X ` `        ``if` `(arr[i] == X) ` `            ``nx++; ` ` `  `        ``// If value is equal to Y ` `        ``// increment counter of Y ` `        ``if` `(arr[i] == Y) ` `            ``ny++; ` ` `  `        ``// If counters are equal(but not ` `        ``// zero) save the result as i ` `        ``if` `((nx != 0) && (nx == ny)) ` `            ``result = i; ` `    ``} ` `     `  `    ``return` `result; ` `} ` ` `  `    ``// Driver code ` `    ``static` `public` `void` `Main (String []args) ` `    ``{ ` `    ``int` `[]arr = {7, 42, 5, 6, 42, 8,  ` `                 ``7, 5, 3, 6, 7}; ` `    ``int` `X = 7, Y = 42; ` `    ``int` `n = arr.Length; ` `    ``Console.WriteLine(``"Ending index of prefix is "` `        ``+ findIndex(arr, X, Y, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. ` `// Improved by Qu Dongfang. `

## PHP

 ` `

Output:

```Ending index of prefix is 9
```

Time complexity : O(n)

This article is contributed by Niteesh Kumar. 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

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.