Open In App

K’th Non-repeating Character in Python using List Comprehension and OrderedDict

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a string and a number k, find the k-th non-repeating character in the string. Consider a large input string with lacs of characters and a small character set. How to find the character by only doing only one traversal of input string? Examples:

Input : str = geeksforgeeks, k = 3
Output : r
First non-repeating character is f,
second is o and third is r.

Input : str = geeksforgeeks, k = 2
Output : o

Input : str = geeksforgeeks, k = 4
Output : Less than k non-repeating
         characters in input.

This problem has existing solution please refer link. We can solve this problem quickly in python using List Comprehension and OrderedDict

Implementation:

Python3




# Function to find k'th non repeating character
# in string
from collections import OrderedDict
 
def kthRepeating(input,k):
 
    # OrderedDict returns a dictionary data
        # structure having characters of input
    # string as keys in the same order they
        # were inserted and 0 as their default value
    dict=OrderedDict.fromkeys(input,0)
 
    # now traverse input string to calculate
        # frequency of each character
    for ch in input:
        dict[ch]+=1
 
    # now extract list of all keys whose value
        # is 1 from dict Ordered Dictionary
    nonRepeatDict = [key for (key,value) in dict.items() if value==1]
     
    # now return (k-1)th character from above list
    if len(nonRepeatDict) < k:
        return 'Less than k non-repeating characters in input.'
    else:
        return nonRepeatDict[k-1]
 
# Driver function
if __name__ == "__main__":
    input = "geeksforgeeks"
    k = 3
    print (kthRepeating(input, k))


Output

r

Last Updated : 21 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads