# Find the last non repeating character in string

Given a string str, the task is to find the last non-repeating character in it.
For example, if the input string is “GeeksForGeeks”, then the output should be ‘r’ and if input string is “GeeksQuiz” then the output should be ‘z’. if there is no non-repeating character then print -1.

Examples:

Input: str = “GeeksForGeeks”
Output: r
‘r’ is the first character from the end which has frequency 1.

Input: str = “aabbcc”
Output: -1
All the characters of the given string have frequencies greater than 1.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Create a frequency array which will store the frequency of each of the character of the given string. Once the frequencies have been updated, start traversing the string from the end character by character and for every character, if the frequency of the current character is 1 then this is the last non-repeating character. If all the characters have frequency greater than 1 then print -1.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include   ` `using` `namespace` `std; ` ` `  `// Maximum distinct characters possible ` `const` `int` `MAX = 256; ` ` `  `// Function to return the last non-repeating character ` `static` `string lastNonRepeating(string str, ``int` `n) ` `{ ` ` `  `    ``// To store the frequency of each of ` `    ``// the character of the given string ` `    ``int` `freq[MAX] = {0}; ` ` `  `    ``// Update the frequencies ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``freq[str.at(i)]++; ` `     `  ` `  `    ``// Starting from the last character ` `    ``for` `(``int` `i = n - 1; i >= 0; i--)  ` `    ``{ ` ` `  `        ``// Current character ` `        ``char` `ch = str.at(i); ` ` `  `        ``// If frequency of the current character is 1 ` `        ``// then return the character ` `        ``if` `(freq[ch] == 1) ` `        ``{ ` `            ``string res; ` `            ``res+=ch; ` `            ``return` `res; ` `        ``} ` `    ``} ` ` `  `    ``// All the characters of the ` `    ``// string are repeating ` `    ``return` `"-1"``; ` `} ` ` `  `// Driver code ` `int` `main()  ` `{ ` `    ``string str = ``"GeeksForGeeks"``; ` `    ``int` `n = str.size(); ` `    ``cout<< lastNonRepeating(str, n); ` `    ``return` `0; ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

## Java

 `// Java implementation of the approach ` `public` `class` `GFG { ` ` `  `    ``// Maximum distinct characters possible ` `    ``static` `final` `int` `MAX = ``256``; ` ` `  `    ``// Function to return the last non-repeating character ` `    ``static` `String lastNonRepeating(String str, ``int` `n) ` `    ``{ ` ` `  `        ``// To store the frequency of each of ` `        ``// the character of the given string ` `        ``int` `freq[] = ``new` `int``[MAX]; ` ` `  `        ``// Update the frequencies ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `            ``freq[str.charAt(i)]++; ` ` `  `        ``// Starting from the last character ` `        ``for` `(``int` `i = n - ``1``; i >= ``0``; i--) { ` ` `  `            ``// Current character ` `            ``char` `ch = str.charAt(i); ` ` `  `            ``// If frequency of the current character is 1 ` `            ``// then return the character ` `            ``if` `(freq[ch] == ``1``) ` `                ``return` `(``""` `+ ch); ` `        ``} ` ` `  `        ``// All the characters of the ` `        ``// string are repeating ` `        ``return` `"-1"``; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``String str = ``"GeeksForGeeks"``; ` `        ``int` `n = str.length(); ` `        ``System.out.println(lastNonRepeating(str, n)); ` `    ``} ` `} `

## Python3

 `# Python3 implementation of the approach  ` ` `  `# Maximum distinct characters possible  ` `MAX` `=` `256``;  ` ` `  `# Function to return the last non-repeating character  ` `def` `lastNonRepeating(string, n) :  ` ` `  `    ``# To store the frequency of each of  ` `    ``# the character of the given string  ` `    ``freq ``=` `[``0``]``*``MAX``;  ` ` `  `    ``# Update the frequencies  ` `    ``for` `i ``in` `range``(n) : ` `        ``freq[``ord``(string[i])] ``+``=` `1``;  ` ` `  `    ``# Starting from the last character  ` `    ``for` `i ``in` `range``(n``-``1``,``-``1``,``-``1``) : ` ` `  `        ``# Current character  ` `        ``ch ``=` `string[i];  ` ` `  `        ``# If frequency of the current character is 1  ` `        ``# then return the character  ` `        ``if` `(freq[``ord``(ch)] ``=``=` `1``) : ` `            ``return` `("" ``+` `ch);  ` `     `  ` `  `    ``# All the characters of the  ` `    ``# string are repeating  ` `    ``return` `"-1"``;  ` ` `  ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` `     `  `    ``string ``=` `"GeeksForGeeks"``;  ` `    ``n ``=` `len``(string);  ` `     `  `    ``print``(lastNonRepeating(string, n));  ` ` `  `# This code is contributed by AnkitRai01 `

## C#

 `// C# implementation of the approach ` `using` `System; ` `     `  `class` `GFG  ` `{ ` ` `  `    ``// Maximum distinct characters possible ` `    ``static` `readonly` `int` `MAX = 256; ` ` `  `    ``// Function to return the last non-repeating character ` `    ``static` `String lastNonRepeating(String str, ``int` `n) ` `    ``{ ` ` `  `        ``// To store the frequency of each of ` `        ``// the character of the given string ` `        ``int` `[]freq = ``new` `int``[MAX]; ` ` `  `        ``// Update the frequencies ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``freq[str[i]]++; ` ` `  `        ``// Starting from the last character ` `        ``for` `(``int` `i = n - 1; i >= 0; i--)  ` `        ``{ ` ` `  `            ``// Current character ` `            ``char` `ch = str[i]; ` ` `  `            ``// If frequency of the current character is 1 ` `            ``// then return the character ` `            ``if` `(freq[ch] == 1) ` `                ``return` `(``""` `+ ch); ` `        ``} ` ` `  `        ``// All the characters of the ` `        ``// string are repeating ` `        ``return` `"-1"``; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``String str = ``"GeeksForGeeks"``; ` `        ``int` `n = str.Length; ` `        ``Console.WriteLine(lastNonRepeating(str, n)); ` `    ``} ` `} ` ` `  `/* This code contributed by PrinciRaj1992 */`

Output:

```r
```

My Personal Notes arrow_drop_up Just another competitive programmer and hard worker

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 :

1

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