LintCode 交叉字符串

//题目地址;http://www.lintcode.com/zh-cn/problem/interleaving-string/
//参考: http://blog.csdn.net/wangyuquanliuli/article/details/47777459
//感想:等我把入门经典的最后几道STL章节的章末习题做完,一定要回去好好补补数据结构,好像忘得差不多了...class Solution
{
public:/*** Determine whether s3 is formed by interleaving of s1 and s2.* @param s1, s2, s3: As description.* @return: true of false.*/bool isInterleave(string s1, string s2, string s3) {// write your code hereif(s3.length()!=s1.length()+s2.length())return false;if(s1.length()==0)return s2==s3;if(s2.length()==0)return s1==s3;vector<vector<bool> > dp(s1.length()+1,vector<bool>(s2.length()+1,false));//(将嵌套vector当作二维数组,下称数组)//这种初始化方法真是新奇,我做ACM时都没遇到过,算是又新遇到的新知识//dp[i][j]表示目前已用s1的前i个字符和s2的前j个字符,能否组成s3的前(i+j)个字符dp[0][0] = true;for(int i=1;i<=s1.length();i++)dp[i][0] = dp[i-1][0]&&(s3[i-1]==s1[i-1]);for(int i=1;i<=s2.length();i++)dp[0][i] = dp[0][i-1]&&(s3[i-1]==s2[i-1]);//按照dp数组的实际意义,初始化不用s1也不用s2(即dp[0][0]);只用s1 / 只用s2组成s3的前 (s1.length() / s2.length())位时,对应的dpfor(int i=1;i<=s1.length();i++){for(int j=1;j<=s2.length();j++){int t = i+j;if(s1[i-1]==s3[t-1]) /*如果s3的第t位和s1的第i位一样时,就可不必考虑相等的这位,因为我们可以确定,这位的添加并不会影响结果的true/false;此时,dp[i][j]的真假,完全由去掉s1的第i位时的情况决定,也即,能否满足:用s1的前(i-1)位,和s2的前j位,组成s3的前(i+j-1)位决定;也就是说,既然我们知道了相等的那位不会产生影响,就去看之前的其他位,当时是否能组成需要的(i+j-1)位,如果能,继续为true,否则为false至于为什么用 || ,是因为 s3的第t位不一定要来自 s1的第i位,只要 s2的第j位与之相等,完全可以从s2中取,只要能有一种满足题意的组合就够了...至于代码分析,和从s1中取是同理的*/dp[i][j] = dp[i][j]||dp[i-1][j];if(s2[j-1]==s3[t-1])dp[i][j] = dp[i][j]||dp[i][j-1];}}return dp[s1.length()][s2.length()];}
};

LintCode 交叉字符串相关推荐

  1. 领扣LintCode问题答案-29. 交叉字符串

    领扣LintCode问题答案-29. 交叉字符串 目录 29. 交叉字符串 鸣谢 29. 交叉字符串 给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成. 样例 1: 输入: &quo ...

  2. 系统软件工程师面试题

    一.c++语言部分 1. extern c 将让 C++ 中的函数名具备 C-linkage 性质,目的是让 C 代码在调用这个函数时,能正确的链接到具体的地址. C调用C++,使用extern &q ...

  3. 算法到底应该怎么学?

    作者:九章算法 链接:https://www.zhihu.com/question/25693637/answer/747872819 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  4. 数据库SQL Server

    一.数据库登陆 服务器名称:.  //联系本机 身份验证:Windows身份验证(管理员权限)和SQL Server验证 登录名:sa(默认登录名) 二.数据库约定 数据库.库.表的名称一律用英文名词 ...

  5. lintcode-49-字符大小写排序

    49-字符大小写排序 给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序. 注意事项 小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置. 样例 给出"abAc ...

  6. java 线程安全原子性_Java 线程安全之原子性

    Java 线程安全之原子性 Java 线程安全之原子性 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可被打乱,也不可以被切割而执行其中的一部分(不可中断).将整个操作视为一个整体是原子性 ...

  7. 面试神仙打架?探秘华为人工智能工程师岗位

    ©原创作者 | 三金 写在前面: "得人工智能者得天下",这句话在互联网圈子流传盛广.人工智能工程师岗位薪酬普遍较高,让部分毕业生眼前一亮,毕业后直接加入到了相关岗位的竞争中,面试 ...

  8. 1.10、Java面经 内容太杂不详细 没用

    1.1java 的 8 种基本数据类型 装箱 拆箱 https://blog.csdn.net/daidaineteasy/article/details/51088269 1.1.1.8 种基本数据 ...

  9. 【Java】字符串交叉合并

    Java字符串交叉合并 使用toCharArray(),利用char[]进行新String生成! public class MergeStrings {private static void inse ...

  10. server多笔记录拼接字符串 sql_第四章、SQL Server数据库查询大全(单表查询、多表连接查询、嵌套查询、关联子查询、拼sql字符串的查询、交叉查询)...

    4.1.查询的类型 declare @value as int set @value = 50 select  'age:'as age,2008 years,@valueas va --这种查询时跟 ...

最新文章

  1. ASP .NET Core Web Razor Pages系列教程五:更新Razor Pages页面
  2. 机器学习笔记:auto encoder
  3. 人和计算机在时间管理方面的相似性
  4. boost::mp11::mp_flatten相关用法的测试程序
  5. bootstrap mysql分页_bootstrap分页
  6. 关于 paddingFactor 及 COLLMOD 的设置值
  7. RabbitMQ之TTL(Time-To-Live 过期时间)
  8. Token Bucket原理
  9. 计算机学业水平考试及格,信息技术学业水平考试表格部分试题(带答案)
  10. php5.3+for+linux,Centos 安装 nginx + php5.3
  11. mysql load data 乱码的问题
  12. Oracle实现网吧计费系统,网吧计费管理系统 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
  13. mysql查询当前时间和用户_MySQL学习笔记(3) - 查询服务器版本,当前时间,当前用户...
  14. vue-cli 里axios的使用
  15. 分享一下苹果手机绕激活锁的体验
  16. 想成为Python高手,必须看这篇爬虫原理介绍!(附29个爬虫项目)
  17. Day22 汽车租赁系统
  18. 线性分类器三种最优准则
  19. 爬虫练习-爬取起点中文网小说信息
  20. centos7.5 挂载超过2T的大硬盘步骤

热门文章

  1. 商用密码产品认证-智能密码钥匙
  2. 天狼星单片机c语言教程,单片机资料百度盘教程.doc
  3. 线性代数 行列式 矩阵 教材笔记
  4. 74HC595引脚图时序图工作原理及pdf中文资料
  5. 《深入浅出WPF》读书笔记
  6. linux第八周实验
  7. 【北通游戏手柄安装驱动(WIN10)】
  8. 计算机快捷键屏幕保护是什么,电脑屏保快捷键.pptx
  9. 权重计算方法一:层次分析法(AHP)
  10. matlab求阶乘函数的代码,matlab阶乘