Related Articles

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

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.

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up