思路:

大概思想如下:
1. 动态规划求解,构造dp[][] 二维数组;
2. 设dp[i][j], i 为 第一个字符串的第i个字母;j 为 第二个字符串的第j个字母  
3. dp[i][j] 如果为 1 ,表示 s1[i] 等于 s3[i+j] 且 dp[i−1][j] 等于 1,同理s2
4. 简单的说 dp[i][j] 为 1 就表示这个点可达,以 dp[0][0] 为起点, dp[len1][len2] 为终点,dp数组中值为 1 的点为路径,向下走表示取 s1 的字符,向右走表示取  s2 的字符。这样就将抽象的字符组合转化成了更好理解的二维数组来表示;
5. 最优子结构即为: s1,s2 的 i,j 点字符之前的字符能否交叉组合成字符串 s3 的前 i+j 个字符,转换到二维数组即为,i,j 点左侧点和上方的点是否可达。

    private static String solution(String line) {
String[] strs = line.split(",");
int len0 = strs[0].length();
int len1 = strs[1].length();
int len2 = strs[2].length();
if (len0 + len1 != len2)
return false + ""; int dp[][] = new int[len0 + 1][len1 + 1];
// init
dp[0][0] = 1;
for (int i = 1; i <= len0; i++) {
if (strs[0].charAt(i - 1) == strs[2].charAt(i - 1))
dp[i][0] = dp[i - 1][0];
else
break;
} for (int i = 1; i <= len1; i++) {
if (strs[1].charAt(i - 1) == strs[2].charAt(i - 1))
dp[0][i] = dp[0][i - 1];
else
break;
}
for (int i = 1; i <= len0; i++) {
for (int j = 1; j <= len1; j++) {
int k = i + j;
if (strs[0].charAt(i - 1) == strs[2].charAt(k - 1) && dp[i - 1][j] == 1)
dp[i][j] = 1;
if (strs[1].charAt(j - 1) == strs[2].charAt(k - 1) && dp[i][j - 1] == 1)
dp[i][j] = 1;
}
}
if (dp[len0][len1] == 1)
return true + "";
return false + "";
}

[小米OJ] 6. 交叉队列的更多相关文章

  1. 小米OJ刷题日志

    虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 ...

  2. [小米OJ] 10. 爬楼梯

    dp 另: 小米oj上的测试样例是错的 ; ) function solution(line) { if (line == 0) return 0; if (line == 1) return 1; ...

  3. 小米oj 不要乱改代码(并查集)

     不要乱改代码 序号:#91难度:非常难时间限制:2000ms内存限制:50M 描述 最近小米公司内爆发了一种名叫"瞎改我代码就会死"的传染病. 传播方式是只要与染病者共同编辑过一 ...

  4. 小米 OJ 编程比赛 01 月常规赛_灯_找规律

     灯 序号:#125难度:有挑战时间限制:1000ms内存限制:32M 描述 一个屋子有 n 个开关控制着 n 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n-1 盏灯,每次按下这个开关,其对应 ...

  5. 小米 OJ 编程比赛 03 月常规赛

    A.数学等式 数据比较小,可以暴力+折半枚举. #include<bits/stdc++.h> #define ll long long #define rep(i,a,b) for(in ...

  6. 随手练——小米OJ 高弗雷勋爵

    高弗雷勋爵 题目链接:https://code.mi.com/problem/list/view?id=113 这个解法比较暴力,主要需要注意的是一颗子弹 弹死两个及以上的情况. #include & ...

  7. 小米OJ 有多少个等差数列

    题目链接 https://code.mi.com/problem/list/view?id=20 代码 #include <bits/stdc++.h> using namespace s ...

  8. 【小米oj】找出单独的数字

    题目链接:https://code.mi.com/problem/list/view?id=2&cid=0&sid=26251#codearea 描述 给出N个数字.其中仅有一个数字出 ...

  9. 小米 OJ 编程比赛 02 月常规赛

    Carryon 数数字 描述 Carryon 最近迷上了数数字,然后 Starry 给了他一个区间[l,r] ,然后提了几个要求, 需要将 ll 到 rr 之间的数全部转化成 16 进制,然后连起来. ...

随机推荐

  1. Qt多线程学习-用例子来理解多线程

    文章出处:DIY部落(http://www.diybl.com/course/3_program/c/c_js/20090303/157373_3.html) POINT 1:QThread类的实例与 ...

  2. uniConnection断线重联(tag属性颇有深意,这样就可以在某些情况下,不用继承实现新控件就可以达到自己的目的)

    群友无法呼吸提供的,谢谢他了. http://blog.sina.com.cn/s/blog_44fa172f0102wb7h.html

  3. C++与QML混合编程实现2048

    http://blog.csdn.net/ieearth/article/details/42705305

  4. HTML连载8-video标签

    ​一.video标签 1.作用:播放视频 2.格式:<video src="视频地址“></video> 3.可添加的属性: (1)autoplay="au ...

  5. http协议内容展示以及如何用telnet发送请求

    1.http协议组成: 报文首部:状态行(请求行) 请求首部字段 通用字段 其他信息 空行 报文主体 GET请求头: GET /test.php?a=1 HTTP/1.1 Host: localhos ...

  6. SpringBoot从入门到精通十一(SpringBoot文件上传的两种方法)

    前言 在企业级项目开发过程中,上传文件是最常用到的功能.SpringBoot集成了SpringMVC,当然上传文件的方式跟SpringMVC没有什么出入. 本章目标 使用SpringBoot项目完成单 ...

  7. .NET开发框架(二)-框架功能简述

    若视频播放不了,请点击 这里查看 本框架为响应式SPA框架,支持PC与手机端的屏幕自适应.手机展示效果视频在文章末尾查看. 框架入口地址:http://letyouknow.net/ 1.框架登录界面 ...

  8. 从理论到实践,全方位认识HTTP/2

    前言   为了降低加载时间,相信大多数人都做过如下尝试   - Keep-alive: TCP持久连接,增加了TCP连接的复用性,但只有当上一个请求/响应完全 完成后,client才能发送下一个请求 ...

  9. LaTeX 中插入GIF图片

    参见博文:liam.page 和 voidcn 前提条件 安装 ImageMagick 软件 (因为要把 gif 图片转换成 png 序列),使用它的命令行工具 convert.exe 命令行下把 g ...

  10. 【设计模式】行为型11解释器模式(Interpreter Pattern)

      解释器模式(Interpreter Pattern) 解释器模式应用场景比较小,也没有固定的DEMO,中心思想就是自定义解释器用来解释固定的对象. 定义:给定一个语言,定义它的文法表示,并定义一个 ...