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.

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h> 
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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 */

chevron_right


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.