# Repeated Character Whose First Appearance is Leftmost

Given a string, find the repeated character present first in the string.

```Input  : geeksforgeeks
Output : g
(mind that it will be g, not e.)

Input  : abcdabcd
Output : a

Input  : abcd
Output : -1
No character repeats
```

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

We have discussed different approaches in Find repeated character present first in a string.

How to solve this problem using one traversal of input string?

Method 1 (Traversing from Left to Right)
We traverse the string from left to right. We keep track of the leftmost index of every character. If a character repeats, we compare its leftmsot index with current result and update the result if result is greater

## C++

 `// CPP program to find first repeating ` `// character ` `#include ` `using` `namespace` `std; ` `#define NO_OF_CHARS 256 ` ` `  `/* The function returns index of the first  ` `repeating character in a string. If  ` `all characters are repeating then  ` `returns -1 */` `int` `firstRepeating(string& str) ` `{ ` `    ``// Initialize leftmost index of every ` `    ``// character as -1. ` `    ``int` `firstIndex[NO_OF_CHARS]; ` `    ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` `        ``firstIndex[i] = -1; ` ` `  `    ``// Traverse from left and update result ` `    ``// if we see a repeating character whose ` `    ``// first index is smaller than current ` `    ``// result. ` `    ``int` `res = INT_MAX; ` `    ``for` `(``int` `i = 0; i < str.length(); i++) { ` `        ``if` `(firstIndex[str[i]] == -1) ` `           ``firstIndex[str[i]] = i; ` `        ``else` `           ``res = min(res, firstIndex[str[i]]); ` `    ``} ` ` `  `    ``return` `(res == INT_MAX) ? -1 : res; ` `} ` ` `  `/* Driver program to test above function */` `int` `main() ` `{ ` `    ``string str = ``"geeksforgeeks"``; ` `    ``int` `index = firstRepeating(str); ` `    ``if` `(index == -1) ` `        ``printf``(``"Either all characters are "` `               ``"distinct or string is empty"``); ` `    ``else` `        ``printf``(``"First Repeating character"` `               ``" is %c"``, ` `               ``str[index]); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find first repeating ` `// character ` ` `  `class` `GFG  ` `{ ` ` `  `    ``static` `int` `NO_OF_CHARS = ``256``; ` ` `  `    ``/* The function returns index of the first  ` `    ``repeating character in a string. If  ` `    ``all characters are repeating then  ` `    ``returns -1 */` `    ``static` `int` `firstRepeating(``char``[] str)  ` `    ``{ ` `        ``// Initialize leftmost index of every ` `        ``// character as -1. ` `        ``int``[] firstIndex = ``new` `int``[NO_OF_CHARS]; ` `        ``for` `(``int` `i = ``0``; i < NO_OF_CHARS; i++) ` `        ``{ ` `            ``firstIndex[i] = -``1``; ` `        ``} ` ` `  `        ``// Traverse from left and update result ` `        ``// if we see a repeating character whose ` `        ``// first index is smaller than current ` `        ``// result. ` `        ``int` `res = Integer.MAX_VALUE; ` `        ``for` `(``int` `i = ``0``; i < str.length; i++)  ` `        ``{ ` `            ``if` `(firstIndex[str[i]] == -``1``)  ` `            ``{ ` `                ``firstIndex[str[i]] = i; ` `            ``}  ` `            ``else` `            ``{ ` `                ``res = Math.min(res, firstIndex[str[i]]); ` `            ``} ` `        ``} ` ` `  `        ``return` `(res == Integer.MAX_VALUE) ? -``1` `: res; ` `    ``} ` ` `  `    ``/* Driver code */` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``char``[] str = ``"geeksforgeeks"``.toCharArray(); ` `        ``int` `index = firstRepeating(str); ` `        ``if` `(index == -``1``) ` `        ``{ ` `            ``System.out.printf(``"Either all characters are "` `                    ``+ ``"distinct or string is empty"``); ` `        ``}  ` `        ``else` `        ``{ ` `            ``System.out.printf(``"First Repeating character"` `                    ``+ ``" is %c"``, str[index]); ` `        ``} ` `    ``} ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

## Python3

 `# Python 3 program to find first repeating ` `# character ` `import` `sys ` ` `  `NO_OF_CHARS ``=` `256` ` `  `# The function returns index of the first  ` `# repeating character in a string. If  ` `# all characters are repeating then  ` `# returns -1 */ ` `def` `firstRepeating(``str``): ` `     `  `    ``# Initialize leftmost index of every ` `    ``# character as -1. ` `    ``firstIndex ``=` `[``0` `for` `i ``in` `range``(NO_OF_CHARS)] ` `    ``for` `i ``in` `range``(NO_OF_CHARS): ` `        ``firstIndex[i] ``=` `-``1` ` `  `    ``# Traverse from left and update result ` `    ``# if we see a repeating character whose ` `    ``# first index is smaller than current ` `    ``# result. ` `    ``res ``=` `sys.maxsize ` `    ``for` `i ``in` `range``(``len``(``str``)): ` `        ``if` `(firstIndex[``ord``(``str``[i])] ``=``=` `-``1``): ` `            ``firstIndex[``ord``(``str``[i])] ``=` `i ` `        ``else``: ` `            ``res ``=` `min``(res, firstIndex[``ord``(``str``[i])]) ` ` `  `    ``if` `res ``=``=` `sys.maxsize: ` `        ``return` `-``1` `    ``else``: ` `        ``return` `res ` ` `  `# Driver function ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``str` `=` `"geeksforgeeks"` `    ``index ``=` `firstRepeating(``str``) ` `    ``if` `(index ``=``=` `-``1``): ` `        ``print``(``"Either all characters are distinct or string is empty"``) ` `    ``else``: ` `        ``print``(``"First Repeating character is"``,``str``[index]) ` `         `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# program to find first repeating ` `// character ` `using` `System; ` `using` `System.Collections.Generic; ` `     `  `class` `GFG  ` `{ ` ` `  `    ``static` `int` `NO_OF_CHARS = 256; ` ` `  `    ``/* The function returns index of the first  ` `    ``repeating character in a string. If  ` `    ``all characters are repeating then  ` `    ``returns -1 */` `    ``static` `int` `firstRepeating(``char``[] str)  ` `    ``{ ` `        ``// Initialize leftmost index of every ` `        ``// character as -1. ` `        ``int``[] firstIndex = ``new` `int``[NO_OF_CHARS]; ` `        ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` `        ``{ ` `            ``firstIndex[i] = -1; ` `        ``} ` ` `  `        ``// Traverse from left and update result ` `        ``// if we see a repeating character whose ` `        ``// first index is smaller than current ` `        ``// result. ` `        ``int` `res = ``int``.MaxValue; ` `        ``for` `(``int` `i = 0; i < str.Length; i++)  ` `        ``{ ` `            ``if` `(firstIndex[str[i]] == -1)  ` `            ``{ ` `                ``firstIndex[str[i]] = i; ` `            ``}  ` `            ``else` `            ``{ ` `                ``res = Math.Min(res, firstIndex[str[i]]); ` `            ``} ` `        ``} ` ` `  `        ``return` `(res == ``int``.MaxValue) ? -1 : res; ` `    ``} ` ` `  `    ``/* Driver code */` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``char``[] str = ``"geeksforgeeks"``.ToCharArray(); ` `        ``int` `index = firstRepeating(str); ` `        ``if` `(index == -1) ` `        ``{ ` `            ``Console.Write(``"Either all characters are "` `                    ``+ ``"distinct or string is empty"``); ` `        ``}  ` `        ``else` `        ``{ ` `            ``Console.Write(``"First Repeating character"` `                    ``+ ``" is {0}"``, str[index]); ` `        ``} ` `    ``} ` `} ` ` `  `// This code is contributed by Princi Singh `

Output:

```First Repeating character is g
```

Time Complexity : O(n). It does only one traversal of input string.
Auxiliary Space : O(1)

Method 2 (Traversing Right to Left)
We traverse the string from right to left. We keep track of the visited characters. If a character repeats, we update the result.

## C++

 `// CPP program to find first repeating ` `// character ` `#include ` `using` `namespace` `std; ` `#define NO_OF_CHARS 256 ` ` `  `/* The function returns index of the first  ` `repeating character in a string. If  ` `all characters are repeating then  ` `returns -1 */` `int` `firstRepeating(string& str) ` `{ ` `    ``// Mark all characters as not visited ` `    ``bool` `visited[NO_OF_CHARS]; ` `    ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` `        ``visited[i] = ``false``; ` ` `  `    ``// Traverse from right and update res as soon ` `    ``// as we see a visited character. ` `    ``int` `res = -1; ` `    ``for` `(``int` `i = str.length() - 1; i >= 0; i--) { ` `        ``if` `(visited[str[i]] == ``false``) ` `            ``visited[str[i]] = ``true``; ` `        ``else` `            ``res = i; ` `    ``} ` ` `  `    ``return` `res; ` `} ` ` `  `/* Driver program to test above function */` `int` `main() ` `{ ` `    ``string str = ``"geeksforgeeks"``; ` `    ``int` `index = firstRepeating(str); ` `    ``if` `(index == -1) ` `        ``printf``(``"Either all characters are "` `               ``"distinct or string is empty"``); ` `    ``else` `        ``printf``(``"First Repeating character"` `               ``" is %c"``, ` `               ``str[index]); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find first repeating ` `// character ` `import` `java.util.*; ` ` `  `class` `GFG  ` `{ ` ` `  `static` `int` `NO_OF_CHARS= ``256``; ` ` `  `/* The function returns index of the first  ` `repeating character in a string. If  ` `all characters are repeating then  ` `returns -1 */` `static` `int` `firstRepeating(String str) ` `{ ` `    ``// Mark all characters as not visited ` `    ``boolean` `[]visited = ``new` `boolean``[NO_OF_CHARS]; ` `    ``for` `(``int` `i = ``0``; i < NO_OF_CHARS; i++) ` `        ``visited[i] = ``false``; ` ` `  `    ``// Traverse from right and update res as soon ` `    ``// as we see a visited character. ` `    ``int` `res = -``1``; ` `    ``for` `(``int` `i = str.length() - ``1``; i >= ``0``; i--)  ` `    ``{ ` `        ``if` `(visited[str.charAt(i)] == ``false``) ` `            ``visited[str.charAt(i)] = ``true``; ` `        ``else` `            ``res = i; ` `    ``} ` ` `  `    ``return` `res; ` `} ` ` `  `/* Driver code */` `public` `static` `void` `main(String[] args)  ` `{ ` `    ``String str = ``"geeksforgeeks"``; ` `    ``int` `index = firstRepeating(str); ` `    ``if` `(index == -``1``) ` `        ``System.out.printf(``"Either all characters are "` `            ``+``"distinct or string is empty"``); ` `    ``else` `        ``System.out.printf(``"First Repeating character"` `            ``+``" is %c"``, ` `            ``str.charAt(index)); ` `} ` `} ` ` `  `// This code contributed by Rajput-Ji `

## Python3

 `# Python3 program to find first  ` `# repeating character  ` ` `  `NO_OF_CHARS ``=` `256` ` `  `""" The function returns index of the first  ` `repeating character in a string. If  ` `all characters are repeating then  ` `returns -1 """` ` `  `def` `firstRepeating(string) : ` `     `  `    ``# Mark all characters as not visited  ` `    ``visited ``=` `[``False``] ``*` `NO_OF_CHARS; ` `     `  `    ``for` `i ``in` `range``(NO_OF_CHARS) : ` `        ``visited[i] ``=` `False``; ` `         `  `    ``# Traverse from right and update res as soon  ` `    ``# as we see a visited character.  ` `    ``res ``=` `-``1``; ` `    ``for` `i ``in` `range``(``len``(string)``-``1``, ``-``1` `, ``-``1``) : ` `        ``if` `(visited[string.index(string[i])] ``=``=` `False``): ` `            ``visited[string.index(string[i])] ``=` `True``; ` `         `  `        ``else``: ` `            ``res ``=` `i; ` `     `  `    ``return` `res;  ` `     `  `     `  `# Driver program to test above function  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``string ``=` `"geeksforgeeks"``;  ` `    ``index ``=` `firstRepeating(string);  ` `     `  `    ``if` `(index ``=``=` `-``1``) : ` `        ``print``(``"Either all characters are"` `, ` `        ``"distinct or string is empty"``);  ` `    ``else` `: ` `        ``print``(``"First Repeating character is:"``, string[index]);  ` `         `  `# This code is contributed by AnkitRai01 `

## C#

 `// C# program to find first repeating ` `// character ` `using` `System;  ` `     `  `class` `GFG  ` `{ ` ` `  `static` `int` `NO_OF_CHARS = 256; ` ` `  `/* The function returns index of the first  ` `repeating character in a string. If  ` `all characters are repeating then  ` `returns -1 */` `static` `int` `firstRepeating(String str) ` `{ ` `    ``// Mark all characters as not visited ` `    ``Boolean []visited = ``new` `Boolean[NO_OF_CHARS]; ` `    ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` `        ``visited[i] = ``false``; ` ` `  `    ``// Traverse from right and update res as soon ` `    ``// as we see a visited character. ` `    ``int` `res = -1; ` `    ``for` `(``int` `i = str.Length - 1; i >= 0; i--)  ` `    ``{ ` `        ``if` `(visited[str[i]] == ``false``) ` `            ``visited[str[i]] = ``true``; ` `        ``else` `            ``res = i; ` `    ``} ` ` `  `    ``return` `res; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(String[] args)  ` `{ ` `    ``String str = ``"geeksforgeeks"``; ` `    ``int` `index = firstRepeating(str); ` `    ``if` `(index == -1) ` `        ``Console.Write(``"Either all characters are "` `+  ` `                      ``"distinct or string is empty"``); ` `    ``else` `        ``Console.Write(``"First Repeating character"` `+  ` `                      ``" is {0}"``, str[index]); ` `} ` `} ` ` `  `// This code is contributed by PrinciRaj1992  `

Output:

```First Repeating character is g
```

Time Complexity : O(n). It does only one traversal of input string.
Auxiliary Space : O(1)

The method 2 is better than method 1 as it does fewer comparisons.

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.