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