Using Counter() in Python to find minimum character removal to make two strings anagram
Given two strings in lowercase, the task is to make them Anagram. The only allowed operation is to remove a character from any string. Find minimum number of characters to be deleted to make both the strings anagram? If two strings contains same data set in any order then strings are called Anagrams.
Examples:
Input : str1 = "bcadeh" str2 = "hea"
Output: 3
We need to remove b, c and d from str1.
Input : str1 = "cddgk" str2 = "gcd"
Output: 2
Input : str1 = "bca" str2 = "acb"
Output: 0
This problem has existing solution please refer Remove minimum number of characters so that two strings become anagram link. We will solve this problem in python quickly using Counter() and Dictionary Data Structure and intersection property of Set data structure. Approach is very simple,
- Convert each string into a dictionary data structure using Counter(iterable) method.
- Count number of keys in both dictionaries ( count1, count2) and count number of keys common in both dictionaries.
- If no common keys found that means we need to remove count1 + count2 characters from both the strings.
- Else (max(count1, count2) – countCommon) will be the number of characters to be removed
Implementation:
Python3
from collections import Counter
def removeChars(str1, str2):
dict1 = Counter(str1)
dict2 = Counter(str2)
keys1 = dict1.keys()
keys2 = dict2.keys()
count1 = len (keys1)
count2 = len (keys2)
set1 = set (keys1)
commonKeys = len (set1.intersection(keys2))
if (commonKeys = = 0 ):
return count1 + count2
else :
return ( max (count1, count2) - commonKeys)
if __name__ = = "__main__" :
str1 = 'bcadeh'
str2 = 'hea'
print (removeChars(str1, str2))
|
Alternate Solution :
- Convert each string into a dictionary data structure using Counter(iterable) method.
- Find the common elements from both dictionary
- Add up the values from common dictionary in order to get the total number of common elements.
Implementation:
Python3
from collections import Counter
def removeChars(a, b):
c1 = Counter(a)
c2 = Counter(b)
common = c1&c2
value = 0
for key in common:
value = value + common[key]
return ( len (a) - 2 * value + len (b))
if __name__ = = "__main__" :
str1 = 'bcadeh'
str2 = 'hea'
print (removeChars(str1, str2))
|
Time Complexity: O(n) where n is length of string
Last Updated :
25 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...