# First non-repeating character using one traversal of string | Set 2

Given a string, find the first non-repeating character in it. For example, if the input string is “GeeksforGeeks”, then output should be ‘f’ and if input string is “GeeksQuiz”, then output should be ‘G’.

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution. We have discussed two solutions in Given a string, find its first non-repeating character . In this post a further optimized solution (over method 2 of previous post) is discussed. The idea is to optimize space. Instead of using a pair to store count and index, we use single element that store index if element appears once, else stores a negative value.

## C++

 `// CPP program to find first non-repeating ` `// character using 1D array and one traversal. ` `#include ` `using` `namespace` `std; ` `#define NO_OF_CHARS 256 ` ` `  `/* The function returns index of the first ` `non-repeating character in a string. If ` `all characters are repeating then ` `reurns INT_MAX */` `int` `firstNonRepeating(``char``* str) ` `{ ` `    ``// Initialize all characters as ` `    ``// absent. ` `    ``int` `arr[NO_OF_CHARS]; ` `    ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` `        ``arr[i] = -1; ` ` `  `    ``// After below loop, the value of ` `    ``// arr[x] is going to be index of ` `    ``// of x if x appears only once. Else ` `    ``// the value is going to be either ` `    ``// -1 or -2. ` `    ``for` `(``int` `i = 0; str[i]; i++) { ` `        ``if` `(arr[str[i]] == -1) ` `            ``arr[str[i]] = i; ` `        ``else` `            ``arr[str[i]] = -2; ` `    ``} ` ` `  `    ``int` `res = INT_MAX; ` `    ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` ` `  `        ``// If this character occurs only ` `        ``// once and appears before the ` `        ``// current result, then update the ` `        ``// result ` `        ``if` `(arr[i] >= 0) ` `            ``res = min(res, arr[i]); ` ` `  `    ``return` `res; ` `} ` ` `  `/* Driver program to test above function */` `int` `main() ` `{ ` `    ``char` `str[] = ``"geeksforgeeks"``; ` `    ``int` `index = firstNonRepeating(str); ` `    ``if` `(index == INT_MAX) ` `        ``printf``(``"Either all characters are "` `               ``"repeating or string is empty"``); ` `    ``else` `        ``printf``(``"First non-repeating character"` `               ``" is %c"``, str[index]); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find first  ` `// non-repeating character  ` `// using 1D array and one  ` `// traversal. ` `import` `java.io.*; ` `import` `java.util.*; ` `import` `java.lang.*; ` ` `  `class` `GFG ` `{ ` `/* The function returns index  ` `of the first non-repeating  ` `character in a string. If ` `all characters are repeating  ` `then returns INT_MAX */` `static` `int` `firstNonRepeating(String str) ` `{ ` `    ``int` `NO_OF_CHARS = ``256``; ` `     `  `    ``// Initialize all characters ` `    ``// as absent. ` `    ``int` `arr[] = ``new` `int``[NO_OF_CHARS]; ` `    ``for` `(``int` `i = ``0``;  ` `             ``i < NO_OF_CHARS; i++) ` `        ``arr[i] = -``1``; ` ` `  `    ``// After below loop, the  ` `    ``// value of arr[x] is going  ` `    ``// to be index of x if x  ` `    ``// appears only once. Else ` `    ``// the value is going to be  ` `    ``// either -1 or -2. ` `    ``for` `(``int` `i = ``0``;  ` `             ``i < str.length(); i++)  ` `    ``{ ` `        ``if` `(arr[str.charAt(i)] == -``1``) ` `            ``arr[str.charAt(i)] = i; ` `        ``else` `            ``arr[str.charAt(i)] = -``2``; ` `    ``} ` ` `  `    ``int` `res = Integer.MAX_VALUE; ` `    ``for` `(``int` `i = ``0``; i < NO_OF_CHARS; i++) ` ` `  `        ``// If this character occurs  ` `        ``// only once and appears before ` `        ``// the current result, then  ` `        ``// update the result ` `        ``if` `(arr[i] >= ``0``) ` `            ``res = Math.min(res, arr[i]); ` ` `  `    ``return` `res; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``String str = ``"geeksforgeeks"``; ` `     `  `    ``int` `index = firstNonRepeating(str); ` `    ``if` `(index == Integer.MAX_VALUE) ` `        ``System.out.print(``"Either all characters are "` `+  ` `                       ``"repeating or string is empty"``); ` `    ``else` `        ``System.out.print(``"First non-repeating character"``+  ` `                             ``" is "` `+ str.charAt(index)); ` `} ` `} `

## Python3

 `''' ` `Python3 implementation to find non repeating character using ` `1D array and one traversal'''` `import` `math as mt ` ` `  `NO_OF_CHARS ``=` `256` ` `  `''' ` `The function returns index of the first  ` `non-repeating character in a string. If  ` `all characters are repeating then  ` `reurns INT_MAX '''` ` `  `def` `firstNonRepeating(strng): ` `    ``#initialize all character as absent ` `     `  `    ``arr``=``[``-``1` `for` `i ``in` `range``(NO_OF_CHARS)] ` `     `  `    ``''' ` `    ``After below loop, the value of  ` `    ``arr[x] is going to be index of  ` `    ``of x if x appears only once. Else  ` `    ``the value is going to be either  ` `    ``-1 or -2.'''` `     `  `    ``for` `i ``in` `range``(``len``(strng)): ` `        ``if` `arr[``ord``(strng[i])]``=``=``-``1``: ` `            ``arr[``ord``(strng[i])]``=``i ` `        ``else``: ` `            ``arr[``ord``(strng[i])]``=``-``2` `    ``res``=``10``*``*``18` `     `  `    ``for` `i ``in` `range``(NO_OF_CHARS): ` `        ``''' ` `        ``If this character occurs only  ` `        ``once and appears before the  ` `        ``current result, then update the  ` `        ``result'''` `        ``if` `arr[i]>``=``0``: ` `            ``res``=``min``(res,arr[i]) ` `    ``return` `res ` ` `  `#Driver prohram to test above function ` ` `  `strng``=``"geeksforgeeks"` ` `  `index``=``firstNonRepeating(strng) ` ` `  `if` `index``=``=``10``*``*``18``: ` `    ``print``(``"Either all characters are repeating or string is empty"``) ` `else``: ` `    ``print``(``"First non-repeating character is"``,strng[index]) ` ` `  `#this code is contributed by Mohit Kumar 29 ` `            `

## C#

 `// C# program to find first  ` `// non-repeating character  ` `// using 1D array and one  ` `// traversal. ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``/* The function returns index  ` `    ``of the first non-repeating  ` `    ``character in a string. If ` `    ``all characters are repeating  ` `    ``then returns INT_MAX */` `    ``static` `int` `firstNonRepeating(String str) ` `    ``{ ` `        ``int` `NO_OF_CHARS = 256; ` ` `  `        ``// Initialize all characters ` `        ``// as absent. ` `        ``int` `[]arr = ``new` `int``[NO_OF_CHARS]; ` `        ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` `            ``arr[i] = -1; ` ` `  `        ``// After below loop, the  ` `        ``// value of arr[x] is going  ` `        ``// to be index of x if x  ` `        ``// appears only once. Else ` `        ``// the value is going to be  ` `        ``// either -1 or -2. ` `        ``for` `(``int` `i = 0; i < str.Length; i++)  ` `        ``{ ` `            ``if` `(arr[str[i]] == -1) ` `                ``arr[str[i]] = i; ` `            ``else` `                ``arr[str[i]] = -2; ` `        ``} ` ` `  `        ``int` `res = ``int``.MaxValue; ` `        ``for` `(``int` `i = 0; i < NO_OF_CHARS; i++) ` ` `  `            ``// If this character occurs  ` `            ``// only once and appears before ` `            ``// the current result, then  ` `            ``// update the result ` `            ``if` `(arr[i] >= 0) ` `                ``res = Math.Min(res, arr[i]); ` ` `  `        ``return` `res; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``String str = ``"geeksforgeeks"``; ` `        ``int` `index = firstNonRepeating(str); ` `        ``if` `(index == ``int``.MaxValue) ` `            ``Console.Write(``"Either all characters are "` `+  ` `                        ``"repeating or string is empty"``); ` `        ``else` `            ``Console.Write(``"First non-repeating character"``+  ` `                                ``" is "` `+ str[index]); ` `    ``} ` `} ` ` `  `// This code is contributed by Rajput-Ji  `

Output:

```First non-repeating character is f
```

Time Complexity : O(n)

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

7

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.