GeeksforGeeks App
Open App
Browser
Continue

# Python | Count the Number of matching characters in a pair of string

Given a pair of non-empty strings. Count the number of matching characters in those strings (consider the single count for the character which have duplicates in the strings).

Examples:

```Input : str1 = 'abcdef'
str2 = 'defghia'
Output : 4
(i.e. matching characters :- a, d, e, f)

Input : str1 = 'aabcddekll12@'
str2 = 'bb22ll@55k'
Output : 5
(i.e. matching characters :- b, 1, 2, @, k)```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach 1: 1. Initialize a counter variable with 0. 2. Iterate over the first string from the starting character to ending character. 3. If the character extracted from first string is found in the second string and also first occurrence index of that extracted character in first string is same as that of index of current extracted character then increment the value of counter by 1.

Note: For this, use string.find(character) in python. This returns the first occurrence index of character in string, if found, otherwise return -1. For example : str=’abcdedde’ str.find(‘d’) –> 3 str.find(‘e’) –> 4 str.find(‘g’) –> -1

4. Output the value of counter. Below is the implementation of above approach.

## Python

 `/``/` `C``+``+` `code to count number of matching``/``/` `characters ``in` `a pair of strings` `# include ``using namespace std` `/``/` `Function to count the matching characters``void count(string str1, string str2)``{``    ``int` `c ``=` `0``, j ``=` `0` `    ``/``/` `Traverse the string ``1` `char by char``    ``for` `(``int` `i``=``0``         ``i < str1.length()``         ``i``+``+``) {` `        ``/``/` `This will check ``if` `str1[i]``        ``/``/` `is` `present ``in` `str2 ``or` `not``        ``/``/` `str2.find(str1[i]) returns ``-` `1` `if` `not` `found``        ``/``/` `otherwise it returns the starting occurrence``        ``/``/` `index of that character ``in` `str2``        ``if` `(str2.find(str1[i]) >``=` `0``            ``and` `j ``=``=` `str1.find(str1[i]))``        ``c ``+``=` `1``        ``j ``+``=` `1``    ``}``    ``cout << ``"No. of matching characters are: "``    ``<< c ``/` `2``}` `/``/` `Driver code``int` `main()``{``    ``string str1 ``=` `"aabcddekll12@"``    ``string str2 ``=` `"bb2211@55k"` `    ``count(str1, str2)``}`

Output :

`No. of matching characters are : 5`

Approach 2: 1.In this approach set() is used to remove duplicate on a given string. 2.After that concept of set(intersection) is used on given string. 3.After that we find a length using len() method.

## Python3

 `# Python code to count number of unique matching``# characters in a pair of strings` `# count function count the common unique``# characters present in both strings .``def` `count(str1 ,str2) :``    ``# set of characters of string1``    ``set_string1 ``=` `set``(str1)` `    ``# set of characters of string2``    ``set_string2 ``=` `set``(str2)` `    ``# using (&) intersection mathematical operation on sets``    ``# the unique characters present in both the strings``    ``# are stored in matched_characters set variable``    ``matched_characters ``=` `set_string1 & set_string2` `    ``# printing the length of matched_characters set``    ``# gives the no. of matched characters``    ``print``(``"No. of matching characters are : "` `+` `str``(``len``(matched_characters)) )`  `# Driver code``if` `__name__ ``=``=` `"__main__"` `:` `    ``str1 ``=` `'aabcddekll12@'`  `# first string``    ``str2 ``=` `'bb2211@55k'`     `# second string` `    ``# call count function``    ``count( str1 , str2 )``   `

Output :

`No. of matching characters are : 5`

Approach 3:

• Initialize a dictionary to keep count of each character in the first string.
• Iterate over the first string and update the count of each character in the dictionary.
• Initialize a counter variable with 0.
• Iterate over the second string and check if the character is present in the dictionary and its count is greater than 0. If yes, increment the counter and decrement the count of the character in the dictionary.
• Print the final value of the counter variable.

## Python3

 `def` `count(str1, str2):``    ``# Initialize an empty dictionary to keep track of the count of each character in str1.``    ``char_count ``=` `{}` `    ``# Iterate over each character in str1.``    ``for` `char ``in` `str1:``        ``# If the character is already in the dictionary, increment its count.``        ``if` `char ``in` `char_count:``            ``char_count[char] ``+``=` `1``        ``# Otherwise, add the character to the dictionary with a count of 1.``        ``else``:``            ``char_count[char] ``=` `1` `    ``# Initialize a counter variable to 0.``    ``counter ``=` `0` `    ``# Iterate over each character in str2.``    ``for` `char ``in` `str2:``        ``# If the character is in the char_count dictionary and its count is greater than 0, increment the counter and decrement the count.``        ``if` `char ``in` `char_count ``and` `char_count[char] > ``0``:``            ``counter ``+``=` `1``            ``char_count[char] ``-``=` `1` `    ``# Print the number of matching characters.``    ``print``(``"No. of matching characters are: "` `+` `str``(counter))` `# Driver code``if` `__name__ ``=``=` `"__main__"``:``    ``# Define two strings to compare.``    ``str1 ``=` `'aabcddekll12@'``    ``str2 ``=` `'bb2211@55k'` `    ``# Call the count function with the two strings.``    ``count(str1, str2)`

Output

`No. of matching characters are: 5`

Time complexity: O(m+n), where m is the length of str1 and n is the length of str2. This is because we are iterating through each character in both strings once, and the time it takes to look up a character in a dictionary is constant.
Auxiliary space: O(k), where k is the number of distinct characters in str1. This is because we are creating a dictionary to store the count of each character in str1

My Personal Notes arrow_drop_up