代码随想录算法训练营第36期DAY58

embedded/2024/10/18 2:37:40/

DAY58

今天的主题是:编辑距离。在字符串进行增删字符的操作。

392判断子序列,简单

首先想到快慢双指针:

通过了,很好:

  1. class Solution {
  2. public:
  3.     bool isSubsequence(string s, string t) {
  4.         int slow=0;
  5.         for(int fast=0;fast<t.size();fast++){
  6.             if(t[fast]==s[slow]) slow++;
  7.         }
  8.         if(slow==s.size()) return true;
  9.         return false;
  10.     }
  11. };

动态规划:没有想法尤其是遍历顺序及递推公式(不要用bool 就好想了 ),积累经验吧:

要看出来,这题和求最长公共子序列是一样的,递推公式有点区别,但也是继承

使用二维数组来记录字符比较结果。

Dp[i][j] 相同长度。

Code:

写了两个for循环,运行时间竟然是最优的,击败100%,奇怪了

  1. class Solution {
  2. public:
  3.     bool isSubsequence(string s, string t) {
  4.         vector<vector<int>> dp(s.size()+1,vector<int>(t.size()+1,0));
  5.         for(int i=1;i<=s.size();i++){
  6.             for(int j=1;j<=t.size();j++){
  7.                 if(s[i-1]==t[j-1]) dp[i][j]=dp[i-1][j-1]+1;
  8.                 else dp[i][j]=dp[i][j-1];
  9.             }
  10.         }
  11.         return dp[s.size()][t.size()]==s.size();
  12.     }
  13. };

115不同的子序列,困难

这题要做的要是编辑距离(仅删除似乎不够,还需要把删除的添加回来,但是这些操作都只在一个字符串上进行),积累经验:

显然如果是求连续子序列,就可以用KMP(记得复习KMP模板);

尝试着写递推公式,纸质笔记:

Code:

注意取模操作。

  1. class Solution {
  2. public:
  3.     long long pow(int n){
  4.         return 1e9;
  5.     }
  6.     int numDistinct(string s, string t) {
  7.         vector<vector<long long>> dp(s.size()+1,vector<long long>(t.size()+1));
  8.         for(int i=1;i<s.size()+1;i++) dp[i][0]=1;
  9.         for(int i=1;i<t.size()+1;i++) dp[0][i]=0;
  10.         dp[0][0]=1;
  11.         for(int i=1;i<=s.size();i++){
  12.             for(int j=1;j<=t.size();j++){
  13.                 if(s[i-1]==t[j-1]) dp[i][j]=(dp[i-1][j-1]+dp[i-1][j])%(int)(pow(9)+7);
  14.                 else dp[i][j]=(dp[i-1][j])%(int)(pow(9)+7);
  15.             }
  16.         }
  17.         return dp[s.size()][t.size()];
  18.     }
  19. };


http://www.ppmy.cn/embedded/48606.html

相关文章

【Qt实现录频】

在Qt中实现录制视频可以通过使用Qt Multimedia模块来实现。你可以使用QCamera类来访问摄像头并捕获视频数据。以下是一个简单的示例代码,用于在Qt中实现录制视频: #include <QCamera> #include <QCameraInfo> #include <QCameraViewfinder> #include <…

基于Verilog表达的FSM状态机

基于Verilog表达的FSM状态机 1 FSM1.1 Intro1.2 Why FSM?1.3 How to do 在这里聚焦基于Verilog的三段式状态机编程&#xff1b; 1 FSM 1.1 Intro 状态机是一种代码实现功能的范式&#xff1b;一切皆可状态机&#xff1b; 状态机编程四要素&#xff1a;– 1.状态State&#…

提取 Excel单元格文本下的超链接

在Excel中&#xff0c;可以使用内置的函数来提取单元格中的超链接地址。如果你有一个包含超链接的单元格&#xff0c;例如B1&#xff0c;你可以使用以下步骤来提取这个超链接&#xff1a; 在一个新的单元格&#xff08;例如C1&#xff09;中&#xff0c;输入以下公式&#xff…

(5)按钮输入

文章目录 前言 1 基础设置 2 数字逻辑/模拟电压设置 3 PWM输入设置 4 额外设置 前言 连接到自动驾驶仪的最多四个外部按钮或开关可以被配置为触发辅助功能(Auxiliary Functions)&#xff0c;类似于 RC 通道开关的触发方式。这些按钮输入可以被配置为使用数字逻辑电平电压…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】感知器

感知器是一种非常早期的线性分类模型&#xff0c;作为一种简单的神经网络模型被提出。感知器是一种模拟生物神经元行为的机器&#xff0c;有与生物神经元相对应的部件&#xff0c;如权重&#xff08;突触&#xff09;、偏置&#xff08;阈值&#xff09;及激活函数&#xff08;…

【CS.AI】AI引领编程新时代:深度探索GitHub Copilot

文章目录 引言0. TOP TAKEAWAYS 重要要点1. Copilot的基本功能2. 技术原理3. 优势与局限优势局限 4. 使用体验4.1 初次使用4.2 在 JetBrains 全家桶中使用 GitHub Copilot1. 安装插件2. 配置插件3. 使用 GitHub Copilot 4.3 日常开发4.4 体验与反馈 5. 对开发者生态系统的影响5…

如何看待有企业使用AI写代码,6个月研发提效超20%,未来AI对程序员会有多大影响?

AIGC对程序员来说&#xff0c;有远虑&#xff0c;无近忧。 目前看来&#xff0c;AI是程序员编写代码很好的助手&#xff0c;尤其在代码补全、照样子写代码、生成注释及文档等方面效果非常好&#xff0c;还有能省去很多查api的时间。 但即便如此&#xff0c;它也仅仅能解决造轮子…

如何舒适的使用VScode

安装好VScode后通常会很不好用&#xff0c;以下配置可以让你的VScode变得好用许多。 VScode的配置流程 1、设置VScode中文2、下载C/C拓展&#xff0c;使代码可以跳转3、更改编码格式4、设置滚轮缩放5、设置字体6、设置保存自动改变格式7、vscode设置快捷代码8、下载插件并学会…