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

474. 一和零

题目

给你一个二进制字符串数组 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 。
   提示: • 1 <= strs.length <= 600 • 1 <= strs[i].length <= 100 • strs[i] 仅由 '0' 和 '1' 组成 • 1 <= m, n <= 100

思路

因为找到最长的字符串还有0和1的个数限制,所以我们用到三维数组。dp[i][j][k]表示前i个字符串中,使用不超过j个0和k个1时的最大子集长度。遍历每个字符串,统计0和1的数量,然后遍历每个字符串所有可能的0和1的个数组合,对于每个j,k,不选就则继承前i个字符串的结果,如果当前字符串0不超过j,1不超过k,比较选与不选当前字符串的两种情况,取较大值更新dp,输出dp[s][m][n]为最终结果。

代码

class Solution {
public://统计字符串中0和1的数量vector<int> getZerosOnes(string& s){vector<int> ans(2,0);for(char c:s) ans[c-'0']++; //'0'转为0,'1'转为1return ans;}int findMaxForm(vector<string>& strs, int m, int n) {int s=strs.size();//dp[i][j][k]表示前i个字符串中,0不超过j,1不超过k的最大子集长度vector<vector<vector<int>>> dp(s+1,vector<vector<int>>(m+1,vector<int>(n+1,0)));       for(int i=0;i<s;++i){vector<int> temp=getZerosOnes(strs[i]);//获取当前字符串的0和1数量int zeros = temp[0], ones = temp[1];for(int j=0;j<=m;++j){for(int k=0;k<=n;++k)//遍历所有可能的1容量{dp[i+1][j][k]=dp[i][j][k];//不选当前字符串的情况if(k>=ones && j>=zeros) //当前字符串的0和1数量不超过当前容量限制
//dp[i][j-zeros][k-ones]+1代表选择当前字符串,dp[i][j][k]代表不选当前字符串dp[i+1][j][k]=max(dp[i][j-zeros][k-ones]+1,dp[i][j][k]);}}}return dp[s][m][n];}
};

http://www.dtcms.com/a/265957.html

相关文章:

  • 【华为od刷题(C++)】HJ22 汽水瓶
  • ubuntu22 桌面版开启root登陆
  • ubuntu22.04安装anaconda
  • embbding you should know
  • 独立开发者软件出海:如何用Semrush高效洞察与增长
  • 【Note】《深入理解Linux内核》Chapter 10 :Linux 内核中的系统调用机制全解析
  • 贝叶斯深度学习:赋予AI不确定性感知的认知革命
  • 【Oracle学习笔记】8.函数(Function)
  • 湖北理元理律师事务所的债务管理方法论
  • 算法刷题打卡(1)—— 快速排序
  • 睿尔曼系列机器人——以创新驱动未来,重塑智能协作新生态(上)
  • 【python】OOP:Object-Oriented Programming
  • 数字人分身+矩阵系统聚合+碰一碰发视频: 源码搭建-支持OEM
  • AI开发平台:从技术壁垒到全民创新,AI 开发平台如何重构产业生态?
  • C++ 标准模板库算法之 transform 用法
  • STC8G 8051内核单片机开发 (中断)
  • 在 UniApp 项目中巧用开发工具与 AI 插件:全面提升开发到部署的效率
  • 【时间序列数据处理的噩梦与救赎:一次复杂数据可视化问题的深度复盘】
  • 运维服务部初级服务工程师面招聘笔试题和答案
  • PROFINET转MODBUS TCP网关在机械臂通信操作中的应用研究
  • 微信小程序——skyline版本问题
  • 2025年金融创新与计算机视觉国际会议(FICV 2025)
  • 【网络协议】WebSocket简介
  • Web 服务器架构选择深度解析
  • HTTP-Postman的安装及其使用
  • 电脑CPU使用率占用100%怎么办 解决步骤指南
  • 【数字后端】- 衡量design的congestion情况
  • HTTP各版本变化详解
  • C# 线程同步(一)同步概念介绍
  • 基于Anything LLM的本地知识库系统远程访问实现路径