Python program to find uncommon words from two Strings
Last Updated :
12 Apr, 2023
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
def UncommonWords(A, B):
count = {}
for word in A.split():
count[word] = count.get(word, 0 ) + 1
for word in B.split():
count[word] = count.get(word, 0 ) + 1
return [word for word in count if count[word] = = 1 ]
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
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
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
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
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
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
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
print (UncommonWords(A, B))
|
Output
['Learning', 'from']
Approach 4: using operator.countOf() method
Python3
import operator as op
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
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
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:
- Create two sets, setA and setB, by splitting string A and B into words using the split() method.
- Use the difference() method to find the uncommon words in setA and setB.
- Combine the uncommon words from both sets using the union() method.
- Return the combined set as a list using the list() method.
- Call the UncommonWords function with the given values of A and B.
- Print the output of the function.
Below is the implementation of the above approach:
Python3
def UncommonWords(A, B):
setA = set (A.split())
setB = set (B.split())
uncommonWords = setA.difference(setB).union(setB.difference(setA))
return list (uncommonWords)
A = "Geeks for Geeks"
B = "Learning from Geeks for Geeks"
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.
Please Login to comment...