Python – Test for Word construction from character list

Given a List and a String, test if the string can be made from list characters.
Examples:
Input : test_list = ['g', 'g', 'e', 'k', 's', '4', 'g', 'g', 'e', 's', 'e', 'e', '4', 'k'], 
                    test_str = 'zambiatek4zambiatek' 
Output : True 
Explanation : String can be made according to character frequencies.
Input : test_list = ['s', '4', 'g', 'g', 'e', 's', 'e', 'e', '4', 'k'], test_str = 'zambiatek4zambiatek' Output : False Explanation : String cannot be made according to character frequencies.
Method #1: Using all() + count()
In this, we test for all characters count from the string to be less than the frequency of each character in the list. The frequencies are extracted using the count() function.
Python3
| # Python3 code to demonstrate working of# Test for Word construction from character list# Using all() + count()# Initializing listtest_list =['g', 'g', 'e', 'k', 's', '4', 'g',             'g', 'e', 's', 'e', 'e', '4', 'k']# Printing original listprint("The original list is : "+str(test_list))# Initializing stringtest_str ='zambiatek4zambiatek'# Checking for frequency of chars less than in listres =all(test_str.count(chr) <=test_list.count(chr) forchrintest_str)# Printing result# If word can be made from our test stringprint("Is word construction possible ? : "+str(res)) | 
The original list is : ['g', 'g', 'e', 'k', 's', '4', 'g', 'g', 'e', 's', 'e', 'e', '4', 'k'] Is word construction possible ? : True
Time Complexity: O(n)
Auxiliary Space: O(1)
Method #2 : Using Counter()
In this, we compute frequencies using Counter(), and then perform subtraction of words from list characters. In the case of an empty list, means not possible to form a word.
Python3
| # Python3 code to demonstrate working of # Test for Word construction from character list# using Counter() function. fromcollections importCounter# Initializing listtest_list =['g', 'g', 'e', 'k', 's', '4', 'g',              'g', 'e', 's', 'e', 'e', '4', 'k']# Printing original listprint("The original list is : "+str(test_list))# Initializing string  test_str ='zambiatek4zambiatek'# Checking for frequency of chars less than in listres =notbool(dict(Counter(test_str) -Counter(test_list)))# Pinting result # If word can be made from our test stringprint("Is word construction possible ? : "+str(res)) | 
The original list is : ['g', 'g', 'e', 'k', 's', '4', 'g', 'g', 'e', 's', 'e', 'e', '4', 'k'] Is word construction possible ? : True
Time Complexity: O(n)
Auxiliary Space: O(1)
Method #3: Using re
- Using the re module to check if all the characters in the test string are present in the test list in a single line.
- The code first concatenates the elements of the test list into a single string. Then, the re.search() function is used to search for a match of the test string with a regular expression pattern that consists of only the characters from the concatenated string.
- If the match is found, the re.search() function returns a Match object, which is truthy, and the result will be True.
- If the match is not found, the function returns None, which is false, and the result will be False.
Python3
| importre# Input liststest_list =['g', 'g', 'e', 'k', 's', '4',             'g', 'g', 'e', 's', 'e', 'e', '4', 'k']# Test stringtest_str ='zambiatek4zambiatek'result =re.search("^["+"".join(test_list) + "]+$", test_str) isnotNone# Printing result# If word can be made from our test stringprint("Is word construction possible? :", result) | 
Is word construction possible? : True
Time Complexity: O(n)
Auxiliary Space: O(1)
Method #4: Using a dictionary
- Initialize an empty dictionary named char_freq.
- Iterate through each character in the test_list.
- For each character, if it already exists in the char_freq dictionary, increment its frequency count.
- Otherwise, add it to the dictionary with a frequency of 1.
- Iterate through each character in the test_str.
- For each character, if it exists in the char_freq dictionary and its frequency count is greater than 0, decrement its frequency count. Otherwise, the word cannot be constructed from the test_list.
- If all characters in the test_str have been successfully checked, return True to indicate that the word can be constructed from the test_list. Otherwise, return False.
- The time complexity of this method is O(n), where n is the length of the test_list or test_str. The auxiliary space complexity is also O(n), where n is the number of unique characters in the test_list
Example:
Python3
| # Python3 code to demonstrate working of # Test for Word construction from character list# Using dictionary# initializing listtest_list =['g', 'g', 'e', 'k', 's', '4', 'g',              'g', 'e', 's', 'e', 'e', '4', 'k']# printing original listprint("The original list is : "+str(test_list))# initializing string  test_str ='zambiatek4zambiatek'# using dictionary to get character frequency countchar_freq ={}forc intest_list:    ifc inchar_freq:        char_freq +=1    else:        char_freq =1# checking if word can be constructed from character listforc intest_str:    ifc inchar_freq andchar_freq > 0:        char_freq -=1    else:        res =False        breakelse:    res =True# printing result print("Is word construction possible ? : "+str(res)) | 
The original list is : ['g', 'g', 'e', 'k', 's', '4', 'g', 'g', 'e', 's', 'e', 'e', '4', 'k'] Is word construction possible ? : True
Time complexity: O(n), where n is the length of the test_list or test_str. 
Auxiliary space: O(n), where n is the number of unique characters in the test_list.
Method #5 : Using operator.countOf() method
Approach:
- Remove duplicates from string test_str and store in x using list(),set() methods,set a variable c=0
- Check whether count of elements in test_list is greater than or equal to the count of elements in test_str, if yes increment c by 1(using operator.countOf())
- If c is equal to the length of x then the given string test_str can be formed from test_list, set res to True.
- Else set res to False.
- Print boolean true or false based on whether the word can be made from the input.
Python3
| # Python3 code to demonstrate working of# Test for Word construction from character list# initializing listtest_list =['g', 'g', 'e', 'k', 's', '4', 'g',            'g', 'e', 's', 'e', 'e', '4', 'k']# printing original listprint("The original list is : "+str(test_list))# initializing stringtest_str ='zambiatek4zambiatek'# checking for frequency of chars less than in listx=list(set(test_str))res=Falseimportoperatorc=0fori inx:    if(operator.countOf(test_list,i)>=operator.countOf(test_str,i)):        c+=1res=c==len(x)# printing resultprint("Is word construction possible ? : "+str(res)) | 
The original list is : ['g', 'g', 'e', 'k', 's', '4', 'g', 'g', 'e', 's', 'e', 'e', '4', 'k'] Is word construction possible ? : True
Time Complexity : O(N) N – length of x
Auxiliary Space: O(1) Since we are using a single variable result.
 
				 
					


