Return index of first repeating character in a string - JavaScript

We are required to write a JavaScript function that takes in a string and returns the index of first character that appears twice in the string.

If there is no such character then we should return -1. Following is our string:

const str = 'Hello world, how are you';

Example

Following is the code:

const str = 'Hello world, how are you';
const firstRepeating = str => {
   const map = new Map();
   for(let i = 0; i < str.length; i++){
      if(map.has(str[i])){
         return map.get(str[i]);
      };
      map.set(str[i], i);
   };
   return -1;
};
console.log(firstRepeating(str));

Output

Following is the output in the console:

2

How It Works

The function uses a Map to store each character along with its first occurrence index. When it encounters a character that already exists in the map, it returns the stored index (first occurrence). In our example, 'l' appears at index 2 and repeats at index 3, so the function returns 2.

Alternative Approach Using indexOf

const str = 'Hello world, how are you';
const firstRepeatingSimple = str => {
   for(let i = 0; i < str.length; i++){
      if(str.indexOf(str[i]) !== i){
         return str.indexOf(str[i]);
      }
   }
   return -1;
};
console.log(firstRepeatingSimple(str));
2

Testing with Different Cases

console.log(firstRepeating('abc'));        // -1 (no repeating)
console.log(firstRepeating('abccba'));     // 0 ('a' repeats)
console.log(firstRepeating('programming')); // 3 ('r' repeats)
-1
0
3

Conclusion

The Map approach is more efficient with O(n) time complexity, while the indexOf method has O(n²) complexity. Use the Map solution for better performance with larger strings.

Updated on: 2026-03-15T23:18:59+05:30

290 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements