当前位置: 首页 > news >正文

【leetcode100】一和零

1、题目描述

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。

请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

示例 1:

输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
输出:4
解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。
其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"} 。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。

示例 2:

输入:strs = ["10", "0", "1"], m = 1, n = 1
输出:2
解释:最大的子集是 {"0", "1"} ,所以答案是 2 。

2、初始思路

2.1 思路

本题实际上还是0-1背包问题,只是背包需要两个维度。

2.2 代码

class Solution:def findMaxForm(self, strs: List[str], m: int, n: int) -> int:dp = [[0]*(n+1) for _ in range(m+1)]for sstr in strs:zeroNum = oneNum = 0            for i in sstr:if i == "0":zeroNum += 1else:oneNum += 1for i in range(m, zeroNum-1, -1):for j in range(n, oneNum-1, -1):dp[i][j] = max(dp[i][j],dp[i-zeroNum][j-oneNum] + 1)return dp[m][n]

相关文章:

  • Linux | I.MX6ULL 文件系统
  • github新建一个远程仓库并添加了README.md,本地git仓库无法push
  • 小迪抓包技术算法加密(6-9天)
  • 如何高效利用呼叫中心系统和AI语音机器人
  • c++基础·左值右值
  • 京东百亿补贴杀入外卖市场:一场关乎即时零售未来的攻防战
  • 【Rust 精进之路之第9篇-所有权·核心】规则与移动 (Move):Rust 内存安全基石详解
  • SQL注入 02
  • [SpringBoot-1] 概述和快速入门(使用vscode)
  • 【C语言函数部分的重要知识点】--自定义函数,static和extern
  • 【2025软考高级架构师】——计算机系统基础(7)
  • Matlab PID参数整定和设计
  • B+树节点与插入操作
  • MySQL 视图
  • shell 正则表达式与文本处理器
  • 基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制研究
  • Flink介绍——实时计算核心论文之MillWheel论文详解
  • [安全实战]逆向工程核心名词详解
  • 基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(三)
  • markdown语法大全- 最新markdown中文文档
  • 习近平向加蓬当选总统恩圭马致贺电
  • 中宣部等十部门联合印发《新时代职业道德建设实施纲要》
  • 中共中央办公厅、国务院办公厅印发《农村基层干部廉洁履行职责规定》
  • 北理工再通报:开除宫某党籍,免去行政职务,解除聘用关系
  • 人民日报:当阅读成为“刚需”
  • 普京宣布临时停火30小时