# Repeated Character Whose First Appearance is Leftmost

• Difficulty Level : Easy
• Last Updated : 03 Jun, 2021

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

Examples:

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

## Javascript

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

## Javascript

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