Remove all duplicates from a given string in Python
We are given a string and we need to remove all duplicates from it? What will be the output if the order of character matters? Examples:
Input : geeksforgeeks
Output : geksfor
This problem has an existing solution please refer to Remove all duplicates from a given string.
Method 1:
Python3
from collections import OrderedDict
def removeDupWithoutOrder( str ):
return "".join( set ( str ))
def removeDupWithOrder( str ):
return "".join(OrderedDict.fromkeys( str ))
if __name__ = = "__main__" :
str = "geeksforgeeks"
print ( "Without Order = " ,removeDupWithoutOrder( str ))
print ( "With Order = " ,removeDupWithOrder( str ))
|
Output
Without Order = foskerg
With Order = geksfor
Time complexity: O(n)
Auxiliary Space: O(n)
Method 2:
Python3
def removeDuplicate( str ):
s = set ( str )
s = "".join(s)
print ( "Without Order:" ,s)
t = ""
for i in str :
if (i in t):
pass
else :
t = t + i
print ( "With Order:" ,t)
str = "geeksforgeeks"
removeDuplicate( str )
|
Output
Without Order: kogerfs
With Order: g
With Order: ge
With Order: ge
With Order: gek
With Order: geks
With Order: geksf
With Order: geksfo
With Order: geksfor
With Order: geksfor
With Order: geksfor
With Order: geksfor
With Order: geksfor
With Order: geksfor
Time complexity: O(n)
Auxiliary Space: O(n)
What do OrderedDict and fromkeys() do?
An OrderedDict is a dictionary that remembers the order of the keys that were inserted first. If a new entry overwrites an existing entry, the original insertion position is left unchanged.
For example, see below code snippet :
Python3
from collections import OrderedDict
ordinary_dictionary = {}
ordinary_dictionary[ 'a' ] = 1
ordinary_dictionary[ 'b' ] = 2
ordinary_dictionary[ 'c' ] = 3
ordinary_dictionary[ 'd' ] = 4
ordinary_dictionary[ 'e' ] = 5
print (ordinary_dictionary)
ordered_dictionary = OrderedDict()
ordered_dictionary[ 'a' ] = 1
ordered_dictionary[ 'b' ] = 2
ordered_dictionary[ 'c' ] = 3
ordered_dictionary[ 'd' ] = 4
ordered_dictionary[ 'e' ] = 5
print (ordered_dictionary)
|
Output
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)])
Time complexity: O(n)
Auxiliary Space: O(1)
fromkeys() creates a new dictionary with keys from seq and values set to a value and returns a list of keys, fromkeys(seq[, value]) is the syntax for fromkeys() method. Parameters :
- seq : This is the list of values that would be used for dictionary keys preparation.
- value : This is optional, if provided then the value would be set to this value.
For example, see below code snippet :
Python3
from collections import OrderedDict
seq = ( 'name' , 'age' , 'gender' )
dict = OrderedDict.fromkeys(seq)
print ( str ( dict ))
dict = OrderedDict.fromkeys(seq, 10 )
print ( str ( dict ))
|
Output
OrderedDict([('name', None), ('age', None), ('gender', None)])
OrderedDict([('name', 10), ('age', 10), ('gender', 10)])
Time complexity: O(n)
Auxiliary Space: O(1)
Method 5: using operator.countOf() method
Python3
import operator as op
def removeDuplicate( str ):
s = set ( str )
s = "".join(s)
print ( "Without Order:" , s)
t = ""
for i in str :
if op.countOf(t, i) > 0 :
pass
else :
t = t + i
print ( "With Order:" , t)
str = "geeksforgeeks"
removeDuplicate( str )
|
Output
Without Order: goksefr
With Order: g
With Order: ge
With Order: ge
With Order: gek
With Order: geks
With Order: geksf
With Order: geksfo
With Order: geksfor
With Order: geksfor
With Order: geksfor
With Order: geksfor
With Order: geksfor
With Order: geksfor
Time Complexity: O(N)
Auxiliary Space : O(N)
Last Updated :
04 Mar, 2024
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...