Repeated Character Whose First Appearance is Leftmost - GeeksforGeeks

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
Asked in: Goldman Sachs internship 
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++
Java
Python3
C#
Javascript
// CPP program to find first repeating// character#include <bits/stdc++.h>using namespace std;#define NO_OF_CHARS 256 /* The function returns index of the firstrepeating character in a string. Ifall characters are repeating thenreturns -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 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
# Python 3 program to find first repeating# characterimport 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 functionif __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# program to find first repeating// characterusing 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
<script>    // Javascript program to find first repeating character         let NO_OF_CHARS = 256;       /* The function returns index of the first    repeating character in a string. If    all characters are repeating then    returns -1 */    function firstRepeating(str)    {        // Initialize leftmost index of every        // character as -1.        let firstIndex = new Array(NO_OF_CHARS);        for (let 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.        let res = Number.MAX_VALUE;        for (let i = 0; i < str.length; i++)        {            if (firstIndex[str[i].charCodeAt()] == -1)            {                firstIndex[str[i].charCodeAt()] = i;            }            else            {                res = Math.min(res, firstIndex[str[i].charCodeAt()]);            }        }           return (res == Number.MAX_VALUE) ? -1 : res;    }         let str = "geeksforgeeks".split('');    let index = firstRepeating(str);    if (index == -1)    {      document.write("Either all characters are "                    + "distinct or string is empty");    }    else    {      document.write("First Repeating character is " + str[index]);    }         // This code is contributed by decode2207.</script>
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++
Java
Python3
C#
Javascript
// CPP program to find first repeating// character#include <bits/stdc++.h>using namespace std;#define NO_OF_CHARS 256 /* The function returns index of the firstrepeating character in a string. Ifall characters are repeating thenreturns -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 program to find first repeating// characterimport java.util.*; class GFG{ static int NO_OF_CHARS= 256; /* The function returns index of the firstrepeating character in a string. Ifall characters are repeating thenreturns -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 program to find first# repeating character NO_OF_CHARS = 256 """ The function returns index of the firstrepeating character in a string. Ifall characters are repeating thenreturns -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 functionif __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# program to find first repeating// characterusing System;     class GFG{ static int NO_OF_CHARS = 256; /* The function returns index of the firstrepeating character in a string. Ifall characters are repeating thenreturns -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 Codepublic 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
<script>    // Javascript program to find first repeating character         let NO_OF_CHARS = 256;      /* The function returns index of the first    repeating character in a string. If    all characters are repeating then    returns -1 */    function firstRepeating(str)    {        // Mark all characters as not visited        let visited = new Array(NO_OF_CHARS);        for (let i = 0; i < NO_OF_CHARS; i++)            visited[i] = false;         // Traverse from right and update res as soon        // as we see a visited character.        let res = -1;        for (let i = str.length - 1; i >= 0; i--)        {            if (visited[str[i].charCodeAt()] == false)                visited[str[i].charCodeAt()] = true;            else                res = i;        }         return res;    }         let str = "geeksforgeeks";    let index = firstRepeating(str);    if (index == -1)        document.write("Either all characters are " +                      "distinct or string is empty");    else        document.write("First Repeating character" +                      " is " + str[index]); // This code is contributed by divyeshrabadiya07.</script>
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. 
ankthon
Rajput-Ji
princiraj1992
29AjayKumar
princi singh
SURENDRA_GANGWAR
decode2207
divyeshrabadiya07
Goldman Sachs
Searching
Strings
Goldman Sachs
Searching
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Split the given array into K sub-arrays such that maximum sum of all sub arrays is minimum
Best First Search (Informed Search)
3 Different ways to print Fibonacci series in Java
Find whether an array is subset of another array | Added Method 5
Program to remove vowels from a String
Reverse a string in Java
Write a program to reverse an array or string
Longest Common Subsequence | DP-4
Write a program to print all permutations of a given string
C++ Data Types