LeetCode474 - Ones and Zeros - Medium (Python)
Posted sky37
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode474 - Ones and Zeros - Medium (Python)相关的知识,希望对你有一定的参考价值。
In the computer world, use restricted resource you have to generate maximum benefit is what we always want to pursue.
For now, suppose you are a dominator of m 0s
and n 1s
respectively. On the other hand, there is an array with strings consisting of only 0s
and 1s
.
Now your task is to find the maximum number of strings that you can form with given m 0s
and n 1s
. Each 0
and 1
can be used at most once.
Note:
- The given numbers of
0s
and1s
will both not exceed100
- The size of given string array won‘t exceed
600
.
Example 1:
Input: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3 Output: 4 Explanation: This are totally 4 strings can be formed by the using of 5 0s and 3 1s, which are “10,”0001”,”1”,”0”
Example 2:
Input: Array = {"10", "0", "1"}, m = 1, n = 1 Output: 2 Explanation: You could form "10", but then you‘d have nothing left. Better form "0" and "1".
思路:dp
dp[i][j]代表i个0和j个1可以形成的最多的字符数量。dp[i][j] = max(1+dp[i-c[‘0‘]][j-c[‘1‘]], dp[i][j]) 因为dp有两种情况,选这个字符以及不选这个字符,选这个字符的话,dp[i][j] = 1+
dp[i-c[‘0‘]][j-c[‘1‘]], 不选的话dp[i][j] = dp[i][j].
最后返回dp[-1][-1]
class Solution: def findMaxForm(self, strs: List[str], m: int, n: int) -> int: if not strs or len(strs) == 0: return False dp = [[0 for _ in range(n+1)] for _ in range(m+1)] for s in strs: c = collections.Counter(s) for zero in range(m, c[‘0‘]-1, -1): for one in range(n, c[‘1‘]-1, -1): dp[zero][one] = max(1+dp[zero-c[‘0‘]][one-c[‘1‘]], dp[zero][one]) # print(dp) return dp[-1][-1]
以上是关于LeetCode474 - Ones and Zeros - Medium (Python)的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 474. Ones and Zeroes 一和零(中等)