Giả sử chúng ta có một danh sách các chuỗi trong đó mỗi chuỗi chứa hai chữ cái "A" s và "B" s. Ta có hai giá trị a và b. Chúng ta phải tìm số lượng chuỗi tối đa có thể được hình thành. Chúng tôi có thể sử dụng nhiều nhất một số "A" và nhiều nhất b một số "B", mà không cần sử dụng lại.
Vì vậy, nếu đầu vào giống như chuỗi =["AAABB", "AABB", "AA", "BB"] a =4 b =2, thì đầu ra sẽ là 2, vì chúng ta có thể lấy chuỗi bằng cách sử dụng 4 "A "s và 2" B "s [" AABB "," AA "].
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- cặp:=một danh sách mới
- đối với mỗi w trong chuỗi, thực hiện
- A:=số "A" trong w
- B:=kích thước của w - A
- chèn một cặp (A, B) vào cuối các cặp
- ans:=một bản đồ trong đó (a, b) có giá trị 0
- đối với mỗi pait (A, B) theo cặp, hãy thực hiện
- temp:=một bản đồ mới từ ans
- đối với mỗi cặp (temp_a, temp_b) và giá trị wc của ans, thực hiện
- nếu temp_a> =A và temp_b> =B, thì
- rem:=a pait (temp_a - A, temp_b - B)
- temp [rem]:=tối đa của temp [rem] (nếu không có rem, 0) và (wc + 1)
- ans:=temp
- nếu temp_a> =A và temp_b> =B, thì
- trả về tối đa danh sách tất cả các giá trị của ans
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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)) Đầu vào
["AAABB", "AABB", "AA", "BB"], 4, 2
Đầu ra
2