lc3316. 字符串dp

dp多开一行一列后,注意原字符串下标映射

 

dp[n][m] ( n 是source长度, m 是pattern长度)

两重循环填表

for i 1-n

   for j 0-m

 

三种状态转移

1.不选 dp i j=dp i-1 j

2.不选if tag, dp[i][j]++

3.if(s i==p j) 选,dp i j=max(dp i j, dp i-1 j-1)

从原字符串中挑选字符组成目标模式,同时尽可能多地删除指定位置的字符,最终能删多少个指定位置的字符。

 

具体逻辑拆解:

1. 前提设定:

- 有一个原字符串 source 和一个目标模式 pattern 

- 有一些指定位置 targetIndices ,删除这些位置的字符会被计分

 

2. 核心目标:

- 要从原字符串中选出字符,按顺序组成目标模式(字符顺序不能乱)

- 同时尽量多删 targetIndices 里的位置

- 最后返回最多能删掉多少个指定位置的字符

 

3. 具体做法(用表格记录状态):

- 用一个表格 f[i][j] 表示:处理到原字符串第 i 个字符,已匹配到模式第 j 个字符时,最多能删掉多少个指定位置

- 两种选择:

- 不选当前字符:直接跳过原字符串第 i 个字符,如果这个位置是指定位置,就加1分

- 选当前字符:如果当前字符和模式第 j 个字符相同,就用它来匹配,分数沿用之前的状态

 

4. 最终结果:

- 处理完所有字符后,表格中 f[n][m] 的值就是答案( n 是原字符串长度, m 是模式长度)

 

举个例子:

- 原字符串是"abcde",模式是"ace"

- 指定位置是[0,2](即第1个和第3个字符)

- 最优方案是选a、c、e组成模式,同时删掉位置0和2的字符,最终得2分

 

class Solution {

public:

    int maxRemovals(string source, string pattern, vector<int>& targetIndices) {

        int n = source.size(), m = pattern.size();

        vector<bool> flag(n + 1, false);  

        for (int x : targetIndices) 

            flag[x + 1] = true;  

        

        

        const int INF = 1e9;

        vector<vector<int>> f(n + 1, vector<int>(m + 1, -INF));

        f[0][0] = 0; // 初始状态:处理0个字符,匹配0个模式字符,删除数为0

        

        for (int i = 1; i <= n; i++) {

            for (int j = 0; j <= m; j++) {

                // 转移1:不使用source第i位,直接跳过

                f[i][j] = f[i - 1][j];

                if (flag[i]) { // 如果当前位置是指定删除位,删除数+1

                    f[i][j]++;

                }

                

                // 转移2:使用source第i位匹配pattern第j位(若字符相同)

                if (j > 0 && source[i - 1] == pattern[j - 1]) {

                    f[i][j] = max(f[i][j],f[i - 1][j - 1]);

                }

            }

        }

        

        return f[n][m]; // 处理完所有字符且匹配完整个模式时的最大删除数

    }

};

 

05.07

1.位运算

 

 

   2.位图

class Solution {
public:
int exchangeBits(int num) {
bitset<33> bitNum(num);
for (int i = 0; i < 16; i++){
bitNum[32] = bitNum[2*i];
bitNum[2*i] = bitNum[2*i+1];
bitNum[2*i+1] = bitNum[32];
}
return (int)bitNum.to_ulong();
}
};

 

577.员工奖金

select e.name,b.bonus

from Employee e 
left join Bonus b on e.empId = b.empId
where b.bonus <1000 or b.bonus is null;

 

游戏查询

select player_id,
min(event_date) as first_login
from Activity
group by player_id

 

lc1661

抽象后,计算查询

select
machine_id,
round(2*avg(if(activity_type = 'start',-1,1)*timestamp),3) as processing_time
from
Activity
group by
machine_id

 

lcr069.二分

 

class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int size = arr.size();
int left = 0;
int right = size - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(arr[mid] < arr[mid + 1]){
left = mid + 1;
}else{
right = mid - 1;
}
}
return left;
}
};

 

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

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

相关文章

Spring原理揭秘--初识AOP

我们知道软件开发一直在追求高效&#xff0c;易维护&#xff0c;易扩展的特性方式。在面向过程编程到面向对象编程的历程中&#xff0c;程序的开发有了非常大的进步。但是oop的方式缺依然存在着一些缺点。oop的方式可以将业务进行很好的分解和封装使其模块化&#xff0c;但是却…

Provider模式:软件架构中的“供应商“设计哲学

文章目录Provider模式&#xff1a;软件架构中的“供应商“设计哲学什么是Provider模式&#xff1f;经典应用场景1. 配置管理Provider2. 数据访问Provider4. 消息队列ProviderProvider模式的优势1. 解耦合实际项目中的应用Provider模式的最佳实践1. 命名约定2. 接口设计原则3. 错…

LTspic下载,帮助及演示电路

1.下载 LTspice是一款强大高效的免费SPICE仿真器软件、原理图采集和波形观测器&#xff0c;为改善模拟电路的仿真提供增强功能和模型。其原理图捕获图形界面使您能够探测原理图并生成仿真结果&#xff0c;这些结果可以通过内置波形查看器进一步观察分析。 链接&#xff1a; …

位置编码/绝对位置编码/相对位置编码/Rope原理+公式详细推导及代码实现

文章目录1. 位置编码概述1.1 为什么需要位置编码&#xff1f;2. 绝对位置编码 (Absolute Position Encoding)2.1 原理2.2 数学公式2.3 代码实现2.4 代码与公式的对应关系2.5 特性与优势2.6 可学习的绝对位置编码3. 相对位置编码 (Relative Position Encoding)3.1 原理3.2 数学公…

网络安全初级第一次作业

一&#xff0c;docker搭建和挂载vpm 1.安装 Docker apt-get install docker.io docker-compose 2.创建文件 mkdir /etc/docker.service.d vim /etc/docker.service.d/http-proxy.conf 3.改写文件配置 [Service] Environment"HTTP_PROXYhttp://192.168.10.103:7890…

交换类排序的C语言实现

交换类排序包括冒泡排序和快速排序两种。冒泡排序基本介绍冒泡排序是通过重复比较相邻元素并交换位置实现排序。其核心思想是每一轮遍历将未排序序列中的最大&#xff08;或最小&#xff09;元素"浮动"到正确位置&#xff0c;类似气泡上升。基本过程是从序列起始位置…

嵌入式 Linux开发环境构建之Source Insight 的安装和使用

目录 一、Source Insight 的安装 二、Source Insight 使用 一、Source Insight 的安装 这个软件是代码编辑和查看软件&#xff0c;打开开发板光盘软件&#xff0c;然后右键选择以管理员身份运行这个安装包。在弹出来的安装向导里面点击 next &#xff0c;如下图所示。这里选择…

【字节跳动】数据挖掘面试题0016:解释AUC的定义,它解决了什么问题,优缺点是什么,并说出工业界如何计算AUC。

文章大纲 AUC(Area Under the Curve)详解一、定义:AUC是什么?二、解决了什么问题?三、优缺点分析四、工业界大规模计算AUC的方法1. 标准计算(小数据)2. 工业级大规模计算方案3.工业界最佳实践4.工业界方案选型建议总结:AUC的本质AUC(Area Under the Curve)详解 一、…

Python后端项目之:我为什么使用pdm+uv

在试用了一段时间的uv和pdm之后&#xff0c;上个月(2025.06)开始&#xff0c;逐步把用了几年的poetry替换成了pdmuv&#xff08;pipx install pdm uv && pdm config use_uv true) ## 为什么poetry -> pdm: 1. 通过ssh连接到服务器并使用poetry shell激活虚拟环境之…

鸿蒙Next开发,配置Navigation的Route

1. 通过router_map.json配置文件进行 创建页面配置router_map.json {"routerMap": [{"name": "StateExamplePage","pageSourceFile": "src/main/ets/pages/state/StateExamplePage.ets","buildFunction": "P…

在 GitHub 上创建私有仓库

一、在 GitHub 上创建私有仓库打开 GitHub官网 并登录。点击右上角的 “” → 选择 “New repository”。填写以下内容&#xff1a; Repository name&#xff1a;仓库名称&#xff0c;例如 my-private-repo。Description&#xff1a;可选&#xff0c;仓库描述。Visibility&…

量产技巧之RK3588 Android12默认移除导航栏状态栏​

本文介绍使用源码编译默认去掉导航栏/状态栏方法,以触觉智能EVB3588开发板演示&#xff0c;Android12系统&#xff0c;搭载了瑞芯微RK3588芯片&#xff0c;该开发板是核心板加底板设计&#xff0c;音视频接口、通信接口等各类接口一应俱全&#xff0c;可帮助企业提高产品开发效…

Conda 安装与配置详解及常见问题解决

《Conda 安装与配置详解及常见问题解决》 安装 Conda 有两种主流方式&#xff0c;分别是安装 Miniconda&#xff08;轻量级&#xff09;和 Anaconda&#xff08;包含常用数据科学包&#xff09;。下面为你详细介绍安装步骤和注意要点。 一、安装 Miniconda&#xff08;推荐&a…

Linux ——lastb定时备份清理

lastb 命令显示的是系统中 /var/log/btmp 文件中的SSH 登录失败记录。你可以像处理 wtmp 那样&#xff0c;对 btmp 文件进行备份与清理。✅ 一、备份 lastb 数据cp /var/log/btmp /var/log/btmp.backup.$(date %F)会保存为如 /var/log/btmp.backup.2025-07-14✅ 二、清空 lastb…

自定义类型 - 联合体与枚举(百度笔试题算法优化)

目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员的结构体和联合体对比1.4 联合体大小的计算1.5 联合练习二、枚举类型2.1 枚举类型的声明2.2 枚举类型的优点总结一、联合体 1.1 联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成…

FS820R08A6P2LB——英飞凌高性能IGBT模块,驱动高效能源未来!

产品概述FS820R08A6P2LB 是英飞凌&#xff08;Infineon&#xff09;推出的一款高性能、高可靠性IGBT功率模块&#xff0c;采用先进的EconoDUAL™ 3封装&#xff0c;专为大功率工业应用设计。该模块集成了IGBT&#xff08;绝缘栅双极型晶体管&#xff09;和二极管&#xff0c;适…

python学智能算法(十八)|SVM基础概念-向量点积

引言 前序学习进程中&#xff0c;已经对向量的基础定义有所了解&#xff0c;已经知晓了向量的值和方向向量的定义&#xff0c;学习链接如下&#xff1a; 向量的值和方向 在此基础上&#xff0c;本文进一步学习向量点积。 向量点积 向量点积运算规则&#xff0c;我们在中学阶…

【windows办公小助手】比文档编辑器更好用的Notepad++轻量编辑器

Notepad 中文版软件下载&#xff1a;这个路径总是显示有百度无法下载&#xff0c;不推荐 更新&#xff1a;推荐下载路径 https://github.com/notepad-plus-plus/notepad-plus-plus/releases 参考博主&#xff1a;Notepad的安装与使用

2025年7月12日全国青少年信息素养大赛图形化(Scratch)编程小学高年级组复赛真题+答案解析

2025年7月12日全国青少年信息素养大赛图形化(Scratch)编程小学高年级组复赛真题+答案解析 选择题 题目一 运行如图所示的程序,舞台上一共会出现多少只小猫呢?( ) A. 5 B. 6 C. 7 D. 8 正确答案: B 答案解析: 程序中“当绿旗被点击”后,角色先移到指定位置,然后“重…

对于独热编码余弦相似度结果为0和词向量解决了词之间相似性问题的理解

文章目录深入理解简单案例结论词向量&#xff08;Word Embedding&#xff09;简介词向量如何解决相似性问题&#xff1f;简单案例&#xff1a;基于上下文的词向量训练总结对于独热表示的向量&#xff0c;如果采用余弦相似度计算向量间的相似度&#xff0c;可以明显的发现任意两…