当前位置: 首页 > 编程笔记 >

C ++编程中的不同子序列

汪耀
2023-03-14
本文向大家介绍C ++编程中的不同子序列,包括了C ++编程中的不同子序列的使用技巧和注意事项,需要的朋友参考一下

假设我们有字符串S和T。我们必须计算等于T的S的不同序列数。

我们知道一个字符串的子序列是一个新字符串,它是通过删除一些字符(可以是无字符)而不会干扰其余字符的相对位置而从原始字符串形成的。(例如,“ ACE”是“ ABCDE”的子序列,而“ AEC”则不是)。

如果输入字符串是“ baalllloonnn”和“ balloon”,那么将有36种不同的选择方式。

为了解决这个问题,我们将遵循以下步骤-

  • n:= s的大小,m:= t的大小。通过在空格之前连接s和t来更新它们

  • 制作一个大小为(n + 1)x(m + 1)的矩阵

  • 设置dp [0,0]:= 1,然后为所有行的第0列设置1,放入1

  • 对于我在1到n范围内

    • 如果s [i] = t [j],则

    • dp [i,j]:= dp [i,j] + dp [i – 1,j]

    • dp [i,j]:= dp [i – 1,j – 1]

    • 对于1到m范围内的j

    • 返回dp [n,m]

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long int lli;
    class Solution {
       public:
       int numDistinct(string s, string t) {
          int n = s.size();
          int m = t.size();
          s = " " + s;
          t = " " + t;
          vector < vector <lli> > dp(n + 1, vector <lli> (m + 1));
          dp[0][0] = 1;
          for(int i = 1; i <= n; i++)dp[i][0] = 1;
          for(int i = 1; i <= n; i++){
             for(int j = 1; j <= m; j++){
                if(s[i] == t[j]) dp[i][j] = dp[i - 1][j - 1];
                dp[i][j]+= dp[i - 1][j];
             }
          }
          return dp[n][m];
       }
    };
    main(){
       Solution ob;
       cout << (ob.numDistinct("baalllloonnn", "balloon"));
    }

    输入项

    "baalllloonnn"
    "balloon"

    输出结果

    36
     类似资料:
    • 本文向大家介绍编写一个在C和C ++编程中产生不同结果的程序,包括了编写一个在C和C ++编程中产生不同结果的程序的使用技巧和注意事项,需要的朋友参考一下 编写一个可编译并在c和c ++中运行并产生不同结果的程序。 使用c和c ++进行编译时,有多种类型的程序会给出不同的结果。 一世。使用字符字面量-c和c ++都以不同的方式对待字符。在C中,它们被视为整数文字,而在C ++中,它们被视为字符。

    • 我试图理解这个简单的C程序: 当它在汇编代码中时: 第三线和第四线发生了什么 为什么必须使用另外两个寄存器(edi和eax)来代替rsp DWORD PTR[rbp-4]实际发生了什么

    • 编译简单的 C 程序 C 语言经典的入门例子是 Hello World,下面是一示例代码: #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } 我们假定该代码存为文件‘hello.c’。要用 gcc 编译该文件,使用下面的命令: $ gcc -Wall hello.c -o hell

    • 我在一个用C语言编写的多线程服务器应用程序上工作,并在嵌入式Linux上执行。一个线程(我称之为通信线程)应该处理所有套接字I/O(发送和接收消息)。依赖于接收到的消息,通信线程将消息发送到另一个线程(例如Thread)。Controller-Thread)处理所需的序列。控制器线程在序列的末尾创建返回消息。此消息被写回通信线程,该线程应该将它们传输到客户端。 这两个线程之间的通信是通过队列实现的

    • 问题内容: 我想在每次模拟结束时向我的Gmail帐户发送一封电子邮件。我尝试在网上搜索并发现sendEmail,但超时。如果有人能指出我所尝试的软件包或链接,我将不胜感激。 谢谢 问题答案: 您可以直接使用本地MTA 并向其提供符合RFC822的文本。

    • 本文向大家介绍在Linux下编译C或C++程序的教程,包括了在Linux下编译C或C++程序的教程的使用技巧和注意事项,需要的朋友参考一下 从开始学习C/C++我们都在是windows下,那么如何(怎样)在linux中编译C/C++代码?在linux终端下(命令行中)编译译C/C++代码? 在任何linux分支下编译C/C++代码,如 Ubuntu ,Red Hat, Fedora ,Debian