牛客题解 | 字符混编

news/2025/3/4 12:09:46/文章来源:https://www.cnblogs.com/wc529065/p/18750268

题目

题目链接

解题思路

这是一个字符串混编问题,可以使用动态规划求解。关键点:

  1. 动态规划定义

    • \(dp[i][j]\) 表示 \(A\) 的前 \(i\) 个字符和 \(B\) 的前 \(j\) 个字符能否混编成 \(C\) 的前 \(i+j\) 个字符
    • \(i\) 表示使用了 \(A\) 的前 \(i\) 个字符
    • \(j\) 表示使用了 \(B\) 的前 \(j\) 个字符
  2. 状态转移

    • 如果当前字符来自 \(A\)\(dp[i][j] = dp[i-1][j] \land A[i-1] = C[i+j-1]\)
    • 如果当前字符来自 \(B\)\(dp[i][j] = dp[i][j-1] \land B[j-1] = C[i+j-1]\)
  3. 基本判断

    • 长度必须匹配:\(n + m = v\)
    • 初始状态:\(dp[0][0] = true\)

代码

class Mixture {
public:bool chkMixture(string A, int n, string B, int m, string C, int v) {if(n + m != v) return false;vector<vector<bool>> dp(n + 1, vector<bool>(m + 1, false));dp[0][0] = true;// 只使用A串for(int i = 1; i <= n; i++) {dp[i][0] = dp[i-1][0] && (A[i-1] == C[i-1]);}// 只使用B串for(int j = 1; j <= m; j++) {dp[0][j] = dp[0][j-1] && (B[j-1] == C[j-1]);}// 动态规划填表for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {// 当前字符可以来自A或Bdp[i][j] = (dp[i-1][j] && A[i-1] == C[i+j-1]) || (dp[i][j-1] && B[j-1] == C[i+j-1]);}}return dp[n][m];}
};
import java.util.*;public class Mixture {public boolean chkMixture(String A, int n, String B, int m, String C, int v) {if(n + m != v) return false;boolean[][] dp = new boolean[n + 1][m + 1];dp[0][0] = true;// 只使用A串for(int i = 1; i <= n; i++) {dp[i][0] = dp[i-1][0] && (A.charAt(i-1) == C.charAt(i-1));}// 只使用B串for(int j = 1; j <= m; j++) {dp[0][j] = dp[0][j-1] && (B.charAt(j-1) == C.charAt(j-1));}// 动态规划填表for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {// 当前字符可以来自A或Bdp[i][j] = (dp[i-1][j] && A.charAt(i-1) == C.charAt(i+j-1)) || (dp[i][j-1] && B.charAt(j-1) == C.charAt(i+j-1));}}return dp[n][m];}
}
# -*- coding:utf-8 -*-class Mixture:def chkMixture(self, A, n, B, m, C, v):if n + m != v:return Falsedp = [[False] * (m + 1) for _ in range(n + 1)]dp[0][0] = True# Only use string Afor i in range(1, n + 1):dp[i][0] = dp[i-1][0] and (A[i-1] == C[i-1])# Only use string Bfor j in range(1, m + 1):dp[0][j] = dp[0][j-1] and (B[j-1] == C[j-1])# Fill dp tablefor i in range(1, n + 1):for j in range(1, m + 1):# Current char can come from either A or Bdp[i][j] = (dp[i-1][j] and A[i-1] == C[i+j-1]) or \(dp[i][j-1] and B[j-1] == C[i+j-1])return dp[n][m]

算法及复杂度

  • 算法:动态规划
  • 时间复杂度:\(\mathcal{O}(nm)\),需要填充整个 \(dp\)
  • 空间复杂度:\(\mathcal{O}(nm)\),需要二维 \(dp\) 数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893359.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客题解 | 字符串相乘

牛客题库题解题目 题目链接 题解 题目难度:中等难度 知识点:字符串、大数相乘 模拟人工计算 计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。数组a存储第一个数字123(逆序)数组b存储第二数组20(逆序)结果存入数…

皮尔逊、斯皮尔曼、肯德尔相关系数

相关系数和特征选择 相关系数和特征选择,一个是属性,一个是特征。一般,把数据集中的各列成为属性,而对算法模型表现有益的属性成为特征。例如,在预测泰坦尼克乘客的存活情况时,乘客姓名这个属性对我们的预测可能没有帮助,甚至会干扰模型表现;而乘客年龄、性别或许与存活…

认识 TapFlow,以编程方式运行 TapData

TapFlow 是 TapData Live Data Platform 最新推出的一个面向编程的API 框架。TapFlow 可以让开发者和数据工程师用一个简单易用而又强大的编程语言来进行数据管道和数据模型的开发工作。**什么是TapFlow? ** TapFlow 是 TapData Live Data Platform 最新推出的一个面向编程的A…

Maya 影视渲染,渲染101 让创作无压力!

Maya 创作时,渲染是不是常让人崩溃?漫长等待、电脑性能不足、报错频出,今天就给大家分享基于渲染 101 平台的 Maya 云渲染,轻松解决这些难题!告别漫长等待,效率飙升**** 自己电脑渲染复杂 Maya 项目,耗时久,进度慢。渲染 101 的云渲染有强大计算集群,众多高性能服务器…

Java SpringBoot 升级后,编译打包都没问题,运行报错

编译打包都没问题,运行报错 10:36:39,587 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5966cc - Registering current configuration as safe fallback point Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core…

在Hyper-V虚拟化平台上,怎么创建和管理虚拟机呢?

确实,在Hyper-V虚拟化平台上,创建和管理虚拟机(VMs)是实现资源高效利用和业务灵活部署的关键。以下是对这一观点的详细阐述:一、创建虚拟机:资源高效利用的基础 资源分配与优化: 在创建虚拟机时,管理员需要根据业务需求合理分配CPU、内存、存储和网络等资源。通过精确的…

STM32实战——ESP8266 WIFI模块

此篇博文提供了ESP8266的开发指南,包括在STM32上使用ESP8266进行WiFi连接、发送和接收HTTP请求以及在ESP8266中使用AT指令发送GET方式请求等内容。ESP8266 硬件介绍 ESP8266系列模组有哪些:在本实验中,ESP8266与ESP-01不做区分。 ESP-01引脚介绍:引脚 功能3.3 3.3V供电,避…

一招学会Prometheus对接三方监控平台

文章来源:乐维社区 通过将Prometheus与不同的监控工具和服务集成,企业可以实现对更广泛资源和服务的监控,包括那些不由Prometheus原生支持的系统。这种集成不仅有助于获取更全面、深入的监控数据,还能提升故障排查和性能优化的效率,从而确保系统的稳定性和可靠性。 环境说…

Motoman机器人XRC控制柜维修

在现代工业生产中,YASKAWA机器人扮演着至关重要的角色。然而,如同所有的机械设备一样,YASKAWA机器人也会出现故障,尤其是其控制柜部分。因此,安川机器人维修工作对于保障机器人的正常运行意义非凡,这其中安川机器人控制柜维修更是关键环节。一、常见故障及解决方法1. 电源…

【域攻击】无文件落地攻击:msiexec

msiexec.exe属于系统进程,是Windows Installer的一部分,用于安装Windows Installer安装包(MSI),对系统的正常运行非常重要,一般在运行Microsoft Update安装更新或安装部分软件的时候出现,占用内存比较大,我们亦可以使用其作为无文件落地的媒介,下面举例说明: Step 1:使…

c# hosting 和 AppDomain

前言 简单介绍一下hosting 和 appdomain。 这两个东西。 正文 我们经常听说寄宿,这个寄宿是什么东西呢? 也就是我们这里要介绍的hosting。 什么是寄宿呢? 想一个问题,一个c# 的exe 程序,为啥能够启动呢?我们记得dll中是il代码。 那么肯定要加载运行时对吧。 那么为什么叫…