097 Interleaving String 交错字符串
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
例如,
给定:
s1 = "aabcc",
s2 = "dbbca",
当 s3 = "aadbbcbcac", 返回 true.
当 s3 = "aadbbbaccc", 返回 false.
详见:https://leetcode.com/problems/interleaving-string/description/
Ø d b b c a
Ø T F F F F F
a T F F F F F
a T T T T T F
b F T T F T F
c F F T T T T
c F F F T F T
字符串s1和s2的长度和必须等于s3的长度,如果不等于,肯定返回false。那么当s1和s2是空串的时候,s3必然是空串,则返回true。所以直接给dp[0][0]赋值true,然后若s1和s2其中的一个为空串的话,那么另一个肯定和s3的长度相等,则按位比较,若相同且上一个位置为True,赋True,其余情况都赋False,这样的二维数组dp的边缘就初始化好了。在任意非边缘位置dp[i][j]时,它的左边或上边有可能为True或是False,两边都可以更新过来,只要有一条路通着,那么这个点就可以为True。那么分别来看,如果左边的为True,那么去除当前对应的s2中的字符串s2[j - 1] 和 s3中对应的位置的字符相比(计算对应位置时还要考虑已匹配的s1中的字符),为s3[j - 1 + i], 如果相等,则赋True,反之赋False。 而上边为True的情况也类似,所以可以求出递推公式为:
dp[i][j] = (dp[i - 1][j] && s1[i - 1] == s3[i - 1 + j]) || (dp[i][j - 1] && s2[j - 1] == s3[j - 1 + i]);
其中dp[i][j] 表示的是 s2 的前 i 个字符和 s1 的前 j 个字符是否匹配 s3 的前 i+j 个字符。
Java实现:
class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
int m=s1.length();
int n=s2.length();
if(m+n!=s3.length()){
return false;
}
boolean[][] path=new boolean[m+1][n+1];
for(int i=0;i<m+1;++i){
for(int j=0;j<n+1;++j){
if(i==0&&j==0){
path[i][j]=true;
}else if(i==0){
path[i][j]=path[i][j-1]&&(s2.charAt(j-1)==s3.charAt(j-1));
}else if(j==0){
path[i][j]=path[i-1][j]&&(s1.charAt(i-1)==s3.charAt(i-1));
}else{
path[i][j] = (path[i][j-1] && (s2.charAt(j-1)==s3.charAt(i+j-1)))
|| (path[i-1][j] && (s1.charAt(i-1)==s3.charAt(i+j-1)));
}
}
}
return path[m][n];
}
}
参考:https://www.cnblogs.com/grandyang/p/4298664.html
最新文章
- 微软亚洲实验室一篇超过人类识别率的论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification ImageNet Classification
- requests模块--python发送http请求
- C++的优秀特性4:指针
- 几种通讯协议的比较RMI >; Httpinvoker >;= Hessian >;>; Burlap >;>; web service
- UI基础视图----UIWebView总结
- js获取某个标签中的信息
- JavaScript的原型
- php不同形式的实现a-z的26个字母的输出
- Elixir游戏服设计四
- Pyhton编程(三)之Pycharm安装及运算符
- 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)
- AJAX from S3 CORS fails on preflight OPTIONS with 403
- 如何让vue自定义组件可以包裹内容,并且渲染出来,以及组件的组合使用
- css实现标题左右横线
- centos7虚拟机克隆后设置固定IP
- java中接口和抽象类的异同点
- codeforces618B
- Android视图动画集合AndoridViewAnimations
- iOS开发之资料收集
- Java API获取consumer group最新提交位移的时间
热门文章
- RobotFramework教程使用笔记——RIDE的相关知识及Resources创建关键字文件
- servlet串行拦截器实现例子
- laravel基础课程---2、Laravel配置文件、路由及php artisan(php artisan是什么)
- AJAX获取数据,需要添加事件
- Spring创建对象的三种方式以及创建时间
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;bireportSqlSessionFactory&#39; defined in URL
- shell编程流程控制
- jQuery 生成随机字符
- 前端开发利器 Sublime Text 3 使用技巧和总结笔记
- 细说CSS中的display属性