Syntax error Program to count maximum number of strings we can generate from list of words and letter counts in python

Program to count maximum number of strings we can generate from list of words and letter counts in python



Suppose we have a list of strings where each string contains two letters "A"s and "B"s. We have two values a and b. We have to find the maximum number of strings that can be formed. We can use at most a number of "A"s and at most b number of "B"s, without reuse.

So, if the input is like strings = ["AAABB", "AABB", "AA", "BB"] a = 4 b = 2, then the output will be 2, as we can take the strings using 4 "A"s and 2 "B"s ["AABB","AA"].

To solve this, we will follow these steps −

  • pairs := a new list
  • for each w in strings, do
    • A := number of "A" in w
    • B := size of w - A
    • insert a pair (A, B) at the end of pairs
  • ans := a map where (a, b) has value 0
  • for each pait (A, B) in pairs, do
    • temp := a new map from ans
    • for each pair (temp_a, temp_b), and value wc of ans, do
      • if temp_a >= A and temp_b >= B, then
        • rem := a pait (temp_a - A, temp_b - B)
        • temp[rem] := maximum of temp[rem] (if rem is not there, 0) and (wc + 1)
      • ans := temp
  • return maximum of list of all values of ans

Let us see the following implementation to get better understanding −

Example 

Live Demo

class Solution:
   def solve(self, strings, a, b):
      pairs = []
      for w in strings:
         A = w.count("A")
         B = len(w) - A
         pairs.append((A, B))
      ans = {(a, b): 0}
      for A, B in pairs:
         temp = dict(ans)
         for (temp_a, temp_b), wc in ans.items():
            if temp_a >= A and temp_b >= B:
               rem = (temp_a - A, temp_b - B)
               temp[rem] = max(temp.get(rem, 0), wc + 1)
         ans = temp
      return max(ans.values())

ob = Solution()
strings = ["AAABB", "AABB", "AA", "BB"]
a = 4
b = 2
print(ob.solve(strings, a, b))

Input

["AAABB", "AABB", "AA", "BB"], 4, 2

Output

2
Updated on: 2020-12-02T05:02:22+05:30

295 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements