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) for chr in test_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. from collections import Counter# 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 = not bool(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
import re# 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) is not None# 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 = {}for c in test_list: if c in char_freq: char_freq += 1 else: char_freq = 1# checking if word can be constructed from character listfor c in test_str: if c in char_freq and char_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=Falseimport operatorc=0for i in x: 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.



