Open In App

Python program to find uncommon words from two Strings

Given two sentences as strings A and B. The task is to return a list of all uncommon words. A word is uncommon if it appears exactly once in any one of the sentences, and does not appear in the other sentence. Note: A sentence is a string of space-separated words. Each word consists only of lowercase letters. 

Examples:

Input : A = “Geeks for Geeks”,  B = “Learning from Geeks for Geeks”
Output : [‘Learning’, ‘from’]

Input : A = “apple banana mango” , B = “banana fruits mango”
Output : [‘apple’, ‘fruits’]

Approach 1: Every uncommon word occurs exactly once in any one of the strings. So, we make a hash to count the number of occurrences of every word, then return a list of words that occurs exactly once. Below is the implementation of the above approach: 




# Python3 program to find a list of uncommon words
 
# Function to return all uncommon words
 
 
def UncommonWords(A, B):
 
    # count will contain all the word counts
    count = {}
 
    # insert words of string A to hash
    for word in A.split():
        count[word] = count.get(word, 0) + 1
 
    # insert words of string B to hash
    for word in B.split():
        count[word] = count.get(word, 0) + 1
 
    # return required list of words
    return [word for word in count if count[word] == 1]
 
 
# Driver Code
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
 
# Print required answer
print(UncommonWords(A, B))

Output
['Learning', 'from']

Time Complexity: O(n)
Auxiliary Space: O(n), where n is length of the list.

Approach 2: Using split(),list(),set(),in and not in operators




# Python3 program to find a list of uncommon words
 
# Function to return all uncommon words
def UncommonWords(A, B):
    A=A.split()
    B=B.split()
    x=[]
    for i in A:
        if i not in B:
            x.append(i)
    for i in B:
        if i not in A:
            x.append(i)
    x=list(set(x))
    return x
             
 
# Driver Code
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
 
# Print required answer
print(UncommonWords(A, B))

Output
['Learning', 'from']

Time Complexity: O(n)
Auxiliary Space: O(n), where n is length of list.

Approach #3: Using Counter() function




# Python3 program to find a list of uncommon words
 
# Function to return all uncommon words
from collections import Counter
 
 
def UncommonWords(A, B):
    A = A.split()
    B = B.split()
    frequency_arr1 = Counter(A)
    frequency_arr2 = Counter(B)
    result = []
 
    for key in frequency_arr1:
        if key not in frequency_arr2:
            result.append(key)
    for key in frequency_arr2:
        if key not in frequency_arr1:
            result.append(key)
 
    return result
 
 
# Driver Code
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
 
# Print required answer
print(UncommonWords(A, B))

Output
['Learning', 'from']

Approach 4:  using operator.countOf() method




# Python3 program to find a list of uncommon words
import operator as op
# Function to return all uncommon words
 
 
def UncommonWords(A, B):
    A = A.split()
    B = B.split()
    x = []
    for i in A:
        if op.countOf(B, i) == 0:
            x.append(i)
    for i in B:
        if op.countOf(A, i) == 0:
            x.append(i)
    x = list(set(x))
    return x
 
 
# Driver Code
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
 
# Print required answer
print(UncommonWords(A, B))

Output
['from', 'Learning']

Time Complexity: O(N)
Auxiliary Space : O(N)

Method 5: Using the set() and difference() method to find the difference of two sets.

Step-by-step approach:

Below is the implementation of the above approach:




# Python3 program to find a list of uncommon words
 
# Function to return all uncommon words
def UncommonWords(A, B):
     
    # split the strings A and B into words and create sets
    setA = set(A.split())
    setB = set(B.split())
     
    # find the uncommon words in setA and setB and combine them
    uncommonWords = setA.difference(setB).union(setB.difference(setA))
     
    # convert the set to a list and return
    return list(uncommonWords)
 
# Driver Code
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
 
# Print required answer
print(UncommonWords(A, B))

Output
['from', 'Learning']

Time complexity: O(n), where n is the total number of words in both strings A and B.
Auxiliary space: O(n), where n is the total number of words in both strings A and B, due to the creation of two sets and one list.


Article Tags :