Find repeated character present first in a string
Last Updated :
13 Apr, 2023
Given a string, find the repeated character present first in the string.
(Not the first repeated character, found here.)

Examples:
Input : geeksforgeeks
Output : g
(mind that it will be g, not e.)
Asked in: Goldman Sachs internship
Simple Solution using O(N^2) complexity: The solution is to loop through the string for each character and search for the same in the rest of the string. This would need two loops and thus not optimal.
Implementation:
C++
// C++ program to find the first
// character that is repeated
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
int findRepeatFirstN2(char* s)
{
// this is O(N^2) method
int p = -1, i, j;
for (i = 0; i < strlen(s); i++)
{
for (j = i + 1; j < strlen(s); j++)
{
if (s[i] == s[j])
{
p = i;
break;
}
}
if (p != -1)
break;
}
return p;
}
// Driver code
int main()
{
char str[] = "geeksforgeeks";
int pos = findRepeatFirstN2(str);
if (pos == -1)
cout << "Not found";
else
cout << str[pos];
return 0;
}
// This code is contributed
// by Akanksha Rai
C
// C program to find the first character that
// is repeated
#include <stdio.h>
#include <string.h>
int findRepeatFirstN2(char* s)
{
// this is O(N^2) method
int p = -1, i, j;
for (i = 0; i < strlen(s); i++) {
for (j = i + 1; j < strlen(s); j++) {
if (s[i] == s[j]) {
p = i;
break;
}
}
if (p != -1)
break;
}
return p;
}
// Driver code
int main()
{
char str[] = "geeksforgeeks";
int pos = findRepeatFirstN2(str);
if (pos == -1)
printf("Not found");
else
printf("%c", str[pos]);
return 0;
}
Java
// Java program to find the first character
// that is repeated
import java.io.*;
import java.util.*;
class GFG {
static int findRepeatFirstN2(String s)
{
// this is O(N^2) method
int p = -1, i, j;
for (i = 0; i < s.length(); i++)
{
for (j = i + 1; j < s.length(); j++)
{
if (s.charAt(i) == s.charAt(j))
{
p = i;
break;
}
}
if (p != -1)
break;
}
return p;
}
// Driver code
static public void main (String[] args)
{
String str = "geeksforgeeks";
int pos = findRepeatFirstN2(str);
if (pos == -1)
System.out.println("Not found");
else
System.out.println( str.charAt(pos));
}
}
// This code is contributed by anuj_67.
Python3
# Python3 program to find the first
# character that is repeated
def findRepeatFirstN2(s):
# this is O(N^2) method
p = -1
for i in range(len(s)):
for j in range (i + 1, len(s)):
if (s[i] == s[j]):
p = i
break
if (p != -1):
break
return p
# Driver code
if __name__ == "__main__":
str = "geeksforgeeks"
pos = findRepeatFirstN2(str)
if (pos == -1):
print ("Not found")
else:
print (str[pos])
# This code is contributed
# by ChitraNayal
C#
// C# program to find the first character
// that is repeated
using System;
class GFG {
static int findRepeatFirstN2(string s)
{
// this is O(N^2) method
int p = -1, i, j;
for (i = 0; i < s.Length; i++)
{
for (j = i + 1; j < s.Length; j++)
{
if (s[i] == s[j])
{
p = i;
break;
}
}
if (p != -1)
break;
}
return p;
}
// Driver code
static public void Main ()
{
string str = "geeksforgeeks";
int pos = findRepeatFirstN2(str);
if (pos == -1)
Console.WriteLine("Not found");
else
Console.WriteLine( str[pos]);
}
}
// This code is contributed by anuj_67.
PHP
<?php
// PHP program to find the first
// character that is repeated
function findRepeatFirstN2($s)
{
// this is O(N^2) method
$p = -1;
for ($i = 0; $i < strlen($s); $i++)
{
for ($j = ($i + 1);
$j < strlen($s); $j++)
{
if ($s[$i] == $s[$j])
{
$p = $i;
break;
}
}
if ($p != -1)
break;
}
return $p;
}
// Driver code
$str = "geeksforgeeks";
$pos = findRepeatFirstN2($str);
if ($pos == -1)
echo ("Not found");
else
echo ($str[$pos]);
// This code is contributed by jit_t
?>
JavaScript
<script>
// Javascript program to find the first
// character that is repeated
function findRepeatFirstN2(s)
{
// This is O(N^2) method
let p = -1, i, j;
for(i = 0; i < s.length; i++)
{
for(j = i + 1; j < s.length; j++)
{
if (s[i] == s[j])
{
p = i;
break;
}
}
if (p != -1)
break;
}
return p;
}
// Driver code
let str = "geeksforgeeks";
let pos = findRepeatFirstN2(str);
if (pos == -1)
document.write("Not found");
else
document.write(str[pos]);
// This code is contributed by suresh07
</script>
Space complexity :- O(1)
Optimization by counting occurrences
This solution is optimized by using the following techniques:
- We loop through the string and hash the characters using ASCII codes. Store 1 if found and store 2 if found again. Also, store the position of the letter first found in.
- We run a loop on the hash array and now we find the minimum position of any character repeated.
Implementation:
C++
// C++ program to find the first character that
// is repeated
#include<bits/stdc++.h>
using namespace std;
// 256 is taken just to ensure nothing is left,
// actual max ASCII limit is 128
#define MAX_CHAR 256
int findRepeatFirst(char* s)
{
// this is optimized method
int p = -1, i, k;
// initialized counts of occurrences of
// elements as zero
int hash[MAX_CHAR] = { 0 };
// initialized positions
int pos[MAX_CHAR];
for (i = 0; i < strlen(s); i++) {
k = (int)s[i];
if (hash[k] == 0) {
hash[k]++;
pos[k] = i;
} else if (hash[k] == 1)
hash[k]++;
}
for (i = 0; i < MAX_CHAR; i++) {
if (hash[i] == 2) {
if (p == -1) // base case
p = pos[i];
else if (p > pos[i])
p = pos[i];
}
}
return p;
}
// Driver code
int main()
{
char str[] = "geeksforgeeks";
int pos = findRepeatFirst(str);
if (pos == -1)
cout << "Not found";
else
cout << str[pos];
return 0;
}
// This code is contributed
// by Akanksha Rai
C
// C program to find the first character that
// is repeated
#include <stdio.h>
#include <string.h>
// 256 is taken just to ensure nothing is left,
// actual max ASCII limit is 128
#define MAX_CHAR 256
int findRepeatFirst(char* s)
{
// this is optimized method
int p = -1, i, k;
// initialized counts of occurrences of
// elements as zero
int hash[MAX_CHAR] = { 0 };
// initialized positions
int pos[MAX_CHAR];
for (i = 0; i < strlen(s); i++) {
k = (int)s[i];
if (hash[k] == 0) {
hash[k]++;
pos[k] = i;
} else if (hash[k] == 1)
hash[k]++;
}
for (i = 0; i < MAX_CHAR; i++) {
if (hash[i] == 2) {
if (p == -1) // base case
p = pos[i];
else if (p > pos[i])
p = pos[i];
}
}
return p;
}
// Driver code
int main()
{
char str[] = "geeksforgeeks";
int pos = findRepeatFirst(str);
if (pos == -1)
printf("Not found");
else
printf("%c", str[pos]);
return 0;
}
Java
// Java Program to find the first character
// that is repeated
import java.util.*;
import java.lang.*;
public class GFG
{
public static int findRepeatFirst(String s)
{
// this is optimized method
int p = -1, i, k;
// initialized counts of occurrences of
// elements as zero
int MAX_CHAR = 256;
int hash[] = new int[MAX_CHAR];
// initialized positions
int pos[] = new int[MAX_CHAR];
for (i = 0; i < s.length(); i++)
{
k = (int)s.charAt(i);
if (hash[k] == 0)
{
hash[k]++;
pos[k] = i;
}
else if (hash[k] == 1)
hash[k]++;
}
for (i = 0; i < MAX_CHAR; i++)
{
if (hash[i] == 2)
{
if (p == -1) // base case
p = pos[i];
else if (p > pos[i])
p = pos[i];
}
}
return p;
}
// Driver code
public static void main(String[] args)
{
String str = "geeksforgeeks";
int pos = findRepeatFirst(str);
if (pos == -1)
System.out.println("Not found");
else
System.out.println(str.charAt(pos));
}
}
// Code Contributed by Mohit Gupta_OMG
Python3
# Python 3 program to find the first
# character that is repeated
# 256 is taken just to ensure nothing
# is left, actual max ASCII limit is 128
MAX_CHAR = 256
def findRepeatFirst(s):
# this is optimized method
p = -1
# initialized counts of occurrences
# of elements as zero
hash = [0 for i in range(MAX_CHAR)]
# initialized positions
pos = [0 for i in range(MAX_CHAR)]
for i in range(len(s)):
k = ord(s[i])
if (hash[k] == 0):
hash[k] += 1
pos[k] = i
elif(hash[k] == 1):
hash[k] += 1
for i in range(MAX_CHAR):
if (hash[i] == 2):
if (p == -1): # base case
p = pos[i]
elif(p > pos[i]):
p = pos[i]
return p
# Driver code
if __name__ == '__main__':
str = "geeksforgeeks"
pos = findRepeatFirst(str);
if (pos == -1):
print("Not found")
else:
print(str[pos])
# This code is contributed by
# Shashank_Sharma
C#
// C# Program to find the first character
// that is repeated
using System;
public class GFG
{
public static int findRepeatFirst(string s)
{
// this is optimized method
int p = -1, i, k;
// initialized counts of occurrences of
// elements as zero
int MAX_CHAR = 256;
int []hash = new int[MAX_CHAR];
// initialized positions
int []pos = new int[MAX_CHAR];
for (i = 0; i < s.Length; i++)
{
k = (int)s[i];
if (hash[k] == 0)
{
hash[k]++;
pos[k] = i;
}
else if (hash[k] == 1)
hash[k]++;
}
for (i = 0; i < MAX_CHAR; i++)
{
if (hash[i] == 2)
{
if (p == -1) // base case
p = pos[i];
else if (p > pos[i])
p = pos[i];
}
}
return p;
}
// Driver code
public static void Main()
{
string str = "geeksforgeeks";
int pos = findRepeatFirst(str);
if (pos == -1)
Console.Write("Not found");
else
Console.Write(str[pos]);
}
}
// This code is contributed by nitin mittal.
JavaScript
<script>
// Javascript Program to find the first character that is repeated
function findRepeatFirst(s)
{
// this is optimized method
let p = -1, i, k;
// initialized counts of occurrences of
// elements as zero
let MAX_CHAR = 256;
let hash = new Array(MAX_CHAR);
hash.fill(0);
// initialized positions
let pos = new Array(MAX_CHAR);
pos.fill(0);
for (i = 0; i < s.length; i++)
{
k = s[i].charCodeAt();
if (hash[k] == 0)
{
hash[k]++;
pos[k] = i;
}
else if (hash[k] == 1)
hash[k]++;
}
for (i = 0; i < MAX_CHAR; i++)
{
if (hash[i] == 2)
{
if (p == -1) // base case
p = pos[i];
else if (p > pos[i])
p = pos[i];
}
}
return p;
}
let str = "geeksforgeeks";
let pos = findRepeatFirst(str);
if (pos == -1)
document.write("Not found");
else
document.write(str[pos]);
// This code is contributed by rameshtravel07.
</script>
Time Complexity: O(N)
Auxiliary space: O(1)
Method #3:Using Built-in Python Functions:
Approach:
- Calculate all frequencies of all characters using Counter() function.
- Traverse the string and check if any element has frequency greater than 1.
- Print the character and break the loop
Below is the implementation:
C++
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
// Function which repeats
// first repeating character
void printrepeated(string str)
{
// Calculating frequencies
// using unordered_map
unordered_map<char, int> freq;
for (char c : str) {
freq[c]++;
}
// Traverse the string
for (char c : str) {
if (freq[c] > 1) {
cout << c << endl;
break;
}
}
}
// Driver code
int main()
{
string str = "geeksforgeeks";
// passing string to printrepeated function
printrepeated(str);
return 0;
}
Java
import java.util.HashMap;
public class Main {
// Function which repeats
// first repeating character
static void printrepeated(String str)
{
// Calculating frequencies
// using HashMap
HashMap<Character, Integer> freq
= new HashMap<Character, Integer>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
freq.put(c, freq.getOrDefault(c, 0) + 1);
}
// Traverse the string
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (freq.get(c) > 1) {
System.out.println(c);
break;
}
}
}
// Driver code
public static void main(String[] args)
{
String str = "geeksforgeeks";
printrepeated(str);
}
}
Python3
# Python implementation
from collections import Counter
# Function which repeats
# first repeating character
def printrepeated(string):
# Calculating frequencies
# using Counter function
freq = Counter(string)
# Traverse the string
for i in string:
if(freq[i] > 1):
print(i)
break
# Driver code
string = "geeksforgeeks"
# passing string to printrepeated function
printrepeated(string)
# this code is contributed by vikkycirus
C#
using System;
using System.Collections.Generic;
class Program
{
// Function which repeats
// first repeating character
static void PrintRepeated(string str)
{
// Calculating frequencies
// using Dictionary
Dictionary<char, int> freq
= new Dictionary<char, int>();
foreach(char c in str)
{
if (freq.ContainsKey(c)) {
freq[c]++;
}
else {
freq[c] = 1;
}
}
// Traverse the string
foreach(char c in str)
{
if (freq[c] > 1) {
Console.WriteLine(c);
break;
}
}
}
// Driver code
static void Main()
{
string str = "geeksforgeeks";
// passing string to PrintRepeated function
PrintRepeated(str);
Console.ReadLine();
}
}
// This code is contributed by user_dtewbxkn77n
JavaScript
// JavaScript implementation
// Function which repeats
// first repeating character
function printrepeated(string) {
// Calculating frequencies
// using an object to store character counts
let freq = {};
for (let i = 0; i < string.length; i++) {
if (string[i] in freq) {
freq[string[i]] += 1;
} else {
freq[string[i]] = 1;
}
}
// Traverse the string
for (let i = 0; i < string.length; i++) {
if (freq[string[i]] > 1) {
console.log(string[i]);
break;
}
}
}
// Driver code
let string = "geeksforgeeks";
// passing string to printrepeated function
printrepeated(string);
// this code is contributed by princekumaras
Time Complexity: O(n)
Auxiliary Space: O(n)
Method #4: Solving just by single traversal of the given string.
Algorithm :
- Traverse the string from left to right.
- If current character is not present in hash map, Then push this character along with its Index.
- If the current character is already present in hash map, Then get the index of current character ( from hash map ) and compare it with the index of the previously found repeating character.
- If the current index is smaller, then update the index.
C++
#include <iostream>
#include<unordered_map>
#define INT_MAX 2147483647
using namespace std;
// Function to find left most repeating character.
char firstRep (string s)
{
unordered_map<char,int> map;
char c='#';
int index=INT_MAX;
// single traversal of string.
for(int i=0;i<s.size();i++)
{
char p=s[i];
if(map.find(p)==map.end())map.insert({p,i});
else
{
if(map[p]<index)
{
index=map[p];
c=p;
}
}
}
return c;
}
// Main function.
int main() {
// Input string.
string s="abccdbd";
cout<<firstRep(s)<<endl;
return 0;
}
// This code is contributed
// by rohan007
Java
// Java code to find the first repeating character in a
// string
import java.util.*;
public class GFG {
public static int INT_MAX = 2147483647;
// Function to find left most repeating character.
public static char firstRep(String s)
{
HashMap<Character, Integer> map
= new HashMap<Character, Integer>();
char c = '#';
int index = INT_MAX;
// single traversal of string.
for (int i = 0; i < s.length(); i++) {
char p = s.charAt(i);
if (!map.containsKey(p)) {
map.put(p, i);
}
else {
if (map.get(p) < index) {
index = map.get(p);
c = p;
}
}
}
return c;
}
// Main function.
public static void main(String[] args)
{
// Input string.
String s = "abccdbd";
System.out.print(firstRep(s));
System.out.print("\n");
}
}
// This code is contributed by Aarti_Rathi
Python3
# Python3 code to find the first repeating character in a
# string
INT_MAX = 2147483647
# Function to find left most repeating character.
def firstRep(s):
map = dict()
c = '#'
index = INT_MAX
# single traversal of string.
i = 0
while (i < len(s)):
p = s[i]
if (not (p in map.keys())):
map[p] = i
else:
if (map.get(p) < index):
index = map.get(p)
c = p
i += 1
return c
if __name__ == "__main__":
# Input string.
s = "abccdbd"
print(firstRep(s), end="")
print("\n", end="")
# This code is contributed by Aarti_Rathi
C#
// C# code to find the first repeating character in a string
using System;
using System.Collections.Generic;
public static class GFG {
static int INT_MAX = 2147483647;
// Function to find left most repeating character.
public static char firstRep(string s)
{
Dictionary<char, int> map
= new Dictionary<char, int>();
char c = '#';
int index = INT_MAX;
// single traversal of string.
for (int i = 0; i < s.Length; i++) {
char p = s[i];
if (!map.ContainsKey(p)) {
map[p] = i;
}
else {
if (map[p] < index) {
index = map[p];
c = p;
}
}
}
return c;
}
// Main function.
public static void Main()
{
// Input string.
string s = "abccdbd";
Console.Write(firstRep(s));
Console.Write("\n");
}
}
// This code is contributed by Aarti_Rathi
JavaScript
<script>
// JavaScript code to find the first repeating character in a string
const INT_MAX = 2147483647
// Function to find left most repeating character.
function firstRep(s)
{
map = new Map();
let c = '#';
let index=INT_MAX;
// single traversal of string.
for(let i = 0; i < s.length; i++)
{
let p = s[i];
if(!map.has(p))map.set(p,i);
else
{
if(map.get(p) < index)
{
index = map.get(p);
c = p;
}
}
}
return c;
}
// Driver code
// Input string.
const s="abccdbd";
document.write(firstRep(s));
// This code is contributed by shinjanpatra
</script>
Time complexity: O(N)
Auxiliary Space: O(1), as there will be a constant number of characters present in the string.
More optimized Solution Repeated Character Whose First Appearance is Leftmost
Similar Reads
First non-repeating character in a stream
Given an input stream s consisting solely of lowercase letters, you are required to identify which character has appeared only once in the stream up to each point. If there are multiple characters that have appeared only once, return the one that first appeared. If no character has appeared only onc
15+ min read
Count occurrences of a character in a repeated string
Given an integer N and a lowercase string. The string is repeated infinitely. The task is to find the No. of occurrences of a given character x in first N letters.Examples: Input : N = 10 str = "abcac"Output : 4Explanation: "abcacabcac" is the substring from the infinitely repeated string. In first
8 min read
First non-repeating character of given string
Given a string s of lowercase English letters, the task is to find the first non-repeating character. If there is no such character, return '$'.Examples: Input: s = "geeksforgeeks"Output: 'f'Explanation: 'f' is the first character in the string which does not repeat.Input: s = "racecar"Output: 'e'Ex
9 min read
Find last index of a character in a string
Given a string str and a character x, find last index of x in str. Examples : Input : str = "geeks", x = 'e' Output : 2 Last index of 'e' in "geeks" is: 2 Input : str = "Hello world!", x = 'o' Output : 7 Last index of 'o' is: 7 Recommended PracticeLast index of a character in the stringTry It! Metho
8 min read
Find the first repeated word in a string
Given a string, Find the 1st repeated word in a string. Examples: Input: "Ravi had been saying that he had been there"Output: hadInput: "Ravi had been saying that"Output: No Repetition Input: "he had had he" he question source: https://www.geeksforgeeks.org/goldman-sachs-interview-experience-set-29-
15+ min read
std::string::find_first_not_of in C++
It searches the string for the first character that does not match any of the characters specified in its arguments. Here we will describe all syntaxes it holds. Return value : Index of first unmatched character when successful or string::npos if no such character found. Syntax 1: Search for the fir
6 min read
Find one extra character in a string
Given two strings which are of lengths n and n+1. The second string contains all the characters of the first string, but there is one extra character. Your task is to find the extra character in the second string. Examples: Input : string strA = "abcd"; string strB = "cbdae"; Output : e string B con
15+ min read
Repeated Character Whose First Appearance is Leftmost
Given a string, find the repeated character present first in the string. Examples: Input: geeksforgeeksOutput: g Input: abcdabcdOutput: a Input: abcdOutput: -1 Brute Force Approach: The brute force approach to solve this problem is to consider each character in the string and then check whether it a
14 min read
Find the first repeated word in a string in Python using Dictionary
We are given a string that may contain repeated words and the task is to find the first word that appears more than once. For example, in the string "Learn code learn fast", the word "learn" is the first repeated word. Let's understand different approaches to solve this problem using a dictionary. U
3 min read
Find the Nth occurrence of a character in the given String
Given string str, a character ch, and a value N, the task is to find the index of the Nth occurrence of the given character in the given string. Print -1 if no such occurrence exists. Examples: Input: str = "Geeks", ch = 'e', N = 2 Output: 2 Input: str = "GFG", ch = 'e', N = 2 Output: -1 Recommended
7 min read