题目链接

利用动态规划的思想, 对于每种状态(i, j)来说都有(i-1, j) 和 (i,j-1)

需要注意的问题 : 初始化的问题,先把i=0和j=0的状态都初始化后才可以进行dp否则发生数组越界

这里学到了一波vector的初始化方法 :

方法 解释
vector< int > v 默认初始化,vector为空, size为0
vector< int > v2(v1) vector v2 = v1 ; v2作为v1的copy
vector< int > v = {1,2,3} 初始化为列表中元素的拷贝
vector< int > v(x,y) 初始化x个元素, 初值为y
vector< int > v(x) 初始化x个元素, (int情况下)初值为0
vector< vector< int > > v 二维vector
vector< vector< int > > v(x,vector< int >(y,z)) 有点绕,这么理解就好\(v[ x ][ y ]=z\)

写出状态更新规则即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. bool isInterleave(string s1, string s2, string s3) {
  4. int len1 = s1.size(), len2 = s2.size(), len3 = s3.size();
  5. if(len1 + len2 != len3)
  6. return false;
  7. vector< vector<bool> > dp(len1+1, vector<bool>(len2+1, false)); // s1的前i个和s2的前j个是否可以成为s3的前i+j个
  8. dp[0][0] = true;
  9. for (int i = 1; i <= len1; ++i) {
  10. dp[i][0] = dp[i-1][0] && s1[i-1] == s3[i-1];
  11. }
  12. for (int j = 1; j <= len2; ++j) {
  13. dp[0][j] = dp[0][j-1] && s2[j-1] == s3[j-1];
  14. }
  15. for (int i = 1; i <= len1; ++i) {
  16. for (int j = 1; j <= len2; ++j) {
  17. dp[i][j] = (dp[i][j-1] && s2[j-1] == s3[i+j-1]) || (dp[i-1][j] && s1[i-1] == s3[i+j-1]);
  18. }
  19. }
  20. return dp[len1][len2];
  21. }
  22. int main(){
  23. freopen("in.txt", "r", stdin);
  24. freopen("out.txt", "w", stdout);
  25. int t;
  26. cin >> t;
  27. while(t--){
  28. string s1, s2, s3;
  29. cin>>s1>>s2>>s3;
  30. cout<<isInterleave(s1,s2,s3)<<endl;
  31. }
  32. return 0;
  33. }

[每日一题2020.06.09] leetcode #97 交错字符串 dp的更多相关文章

  1. [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式

    题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...

  2. [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找

    739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...

  3. [每日一题2020.06.17] leetcode周赛T3 5438 制作m束花所需的最少天数 二分搜索

    题目链接 这题我开始一直在想如何在数组上dp操作搜索区间, 很蠢, 实际上用二分查找的方法可以很快的解决 首先我们通过一个函数判断第x天是否符合题意, 如果x天可以做出m束花, 那么大于m的天数必然可 ...

  4. [每日一题2020.06.16] leetcode双周赛T3 5423 找两个和为目标值且不重叠的子数组 DP, 前缀和

    题目链接 给你一个整数数组 arr 和一个整数值 target . 请你在 arr 中找 两个互不重叠的子数组 且它们的和都等于 target .可能会有多种方案,请你返回满足要求的两个子数组长度和的 ...

  5. Java实现 LeetCode 97 交错字符串

    97. 交错字符串 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = " ...

  6. [每日一题2020.06.11]Codeforces Round #644 (Div. 3) H

    A-E见 : 这里 题目 我觉得很有必要把H拿出来单独发( 其实是今天懒得写题了 ) problem H 一个从 1 到 $ 2^m - 1$ 的长度为m的连续二进制序列, 删去指定的n个数, 问剩余 ...

  7. [每日一题2020.06.10]Codeforces Round #644 (Div. 3) ABCDEFG

    花了5个多少小时总算把div3打通一次( 题目链接 problem A 题意 : 两个x*y的矩形不能重叠摆放, 要放进一个正方形正方形边长最小为多少 先求n = min(2x, 2y, x+y) 再 ...

  8. [每日一题2020.06.08]洛谷P1605 DFS

    今天cf又杯具的只写出2题, 虽然AB题20分钟左右就搞定了, 但是CD写了2个小时也没写出来 D题我用到了DFS, 虽然必不正确, 但是我至少发现了一个问题, 那就是我连DFS都忘了, 于是怒找DF ...

  9. [每日一题2020.06.15]P1226 【模板】快速幂取余运算

    我是题目 快速幂就是快速求 \(a^b\)的一种算法 快速幂 思想 : 比如我要求 \(6^9\) 首先将幂转化为二进制形式 : \[6^9 = 6^{1001} \tag{1} \] 可以得到 : ...

随机推荐

  1. Poj1328 用雷达覆盖所有的岛屿

    (此配图来自http://blog.csdn.net/zhengnanlee/article/details/9613161) 图中ABCD为海岛的位置.题目中会给出几个海岛的坐标位置,雷达覆盖半径d ...

  2. java-五大内存图

    jrm—Java虚拟机在进行程序运行时会向cpu申请一个内存约为10%左右,该内存被jrm分为5大区域 一:栈内存(stack)用来存储变量 当栈消失时,变量也随之消失.二:堆内存(heap)在Jav ...

  3. mvc的视图渲染方式

    ModelAndView ModelAndView vm = new ModelAndView(); //封装要显示在试图上的数据 vm.addObject("msg"," ...

  4. ubuntu 安装 swftoos

    一:下载依赖: freetype下载地址 : http://ftp.twaren.net/Unix/NonGNU/freetype/ jpegsrc:下载地址 http://www.ijg.org/f ...

  5. 【Java8新特性】Stream API有哪些中间操作?看完你也可以吊打面试官!!

    写在前面 在上一篇<[Java8新特性]面试官问我:Java8中创建Stream流有哪几种方式?>中,一名读者去面试被面试官暴虐!归根结底,那哥儿们还是对Java8的新特性不是很了解呀!那 ...

  6. PreparedStatement实现表数据的增删改 & 封装数据库链接和关闭操作

    PreparedStatement实现表数据的增删改 PreparedStatementUpdateTest package com.aff.PreparedStatement; import jav ...

  7. 【转】shell的反引号、单引号、双引号的作用

    Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...

  8. nmap script 总结

    一些常用脚本用法 nmap 脚本一些支持笼统扫描 usag. nmap -F --script auth 10.0.0.1 auth: 负责处理鉴权证书(绕开鉴权)的脚本 broadcast: 在局域 ...

  9. 【Android】SDK的配置

    1:Android Studio 下载   安装后创建项目 2:  打开settings 3:下载后,配置SDK 4:下载jdk1.8.0_74.rar 解压   加入环境变量 5:下载夜神模拟器,加 ...

  10. (String),toString(),String.valueOf()

    String.valueOf("")的源码:(推荐这种写法) 注意:obj问null时,返回值是字符串"null" toString("") ...