lintcode 中等题:interleaving String 交叉字符串
题目
交叉字符串
给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。
比如 s1 = "aabcc" s2 = "dbbca"
- 当 s3 = "aadbbcbcac",返回 true.
- 当 s3 = "aadbbbaccc", 返回 false.
要求时间复杂度为O(n^2)或者更好
解题
交叉比较,不能够AC
参考这里的程序,直接运行原程序,在自己的基础上进行修改运行到78%测试数据的时候还是错了
这里给了几种失败的方法
下面只有选择动态规划来解题了
动态规划矩阵matched[l1][l2]表示s1取l1长度(最后一个字母的pos是l1-1),s2取l2长度(最后一个字母的pos是l2-1),是否能匹配s3的l1+12长度。
那么,我们有
matched[l1][l2] = s1[l1-1] == s3[l1+l2-1] && matched[l1-1][l2] || s2[l2 - 1] == s3[l1+l2-1] && matched[l1][l2-1]
边界条件是,其中一个长度为0,另一个去匹配s3.
Java
public class Solution {
/**
* Determine whether s3 is formed by interleaving of s1 and s2.
* @param s1, s2, s3: As description.
* @return: true or false.
*/
public boolean isInterleave(String s1, String s2, String s3) {
// write your code here
if(s1.length() + s2.length() != s3.length())
return false;
// if(s1.equals("")&& s2.equals(s3))
// return true;
// if(s2.equals("")&&s1.equals(s3))
// return true;
boolean[][] matched= new boolean[s1.length()+1][s2.length()+1];
matched[0][0]= true;
for(int i1=1;i1<= s1.length(); i1++){
if(s3.charAt(i1-1) == s1.charAt(i1-1))
matched[i1][0] = true;
}
for(int i2= 1;i2<= s2.length();i2++){
if(s3.charAt(i2-1) == s2.charAt(i2-1))
matched[0][i2] = true;
}
for(int i1=1;i1<=s1.length(); i1++){
char c1 = s1.charAt(i1-1);
for(int i2 = 1;i2<= s2.length();i2++){
int i3 = i1+ i2;
char c2 = s2.charAt(i2- 1);
char c3 = s3.charAt(i3 -1);
if(c1 == c3)
matched[i1][i2] =matched[i1][i2] || matched[i1-1][i2];
if( c2== c3)
matched[i1][i2] = matched[i1][i2] || matched[i1][i2-1]; }
}
return matched[s1.length()][s2.length()];
}
}
Java Code
Python
class Solution:
"""
@params s1, s2, s3: Three strings as description.
@return: return True if s3 is formed by the interleaving of
s1 and s2 or False if not.
@hint: you can use [[True] * m for i in range (n)] to allocate a n*m matrix.
"""
def isInterleave(self, s1, s2, s3):
# write your code here
len1 = len(s1)
len2 = len(s2)
len3 = len(s3)
if len1+len2 != len3:
return False
# len1 = 2
# len2 = 3
matched = [[False for i in range(len2+1)] for j in range(len1+1)] matched[0][0] = True
# print matched
for i in range(1,len1+1):
if s1[i-1]==s3[i-1]:
matched[i][0] = True
for i in range(1,len2+1):
if s2[i-1]==s3[i-1]:
matched[0][i] = True
for i1 in range(1,len1+1):
for i2 in range(1,len2+1):
i3 = i1 + i2
if s1[i1-1]==s3[i3-1]:
matched[i1][i2] = matched[i1][i2] or matched[i1-1][i2]
if s2[i2-1]==s3[i3-1]:
matched[i1][i2] = matched[i1][i2] or matched[i1][i2-1] return matched[len1][len2]
Python Code
lintcode 中等题:interleaving String 交叉字符串的更多相关文章
- lintcode 中等题:Intersection of Two Linked Lists 两个链表的交叉
题目 两个链表的交叉 请写一个程序,找到两个单链表最开始的交叉节点. 样例 下列两个链表: A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3 在节点 c1 开始交 ...
- lintcode 中等题: Implement Trie
题目 Implement Trie Implement a trie with insert, search, and startsWith methods. 样例 注意 You may assu ...
- lintcode 中等题:minimum window substring 最小子串覆盖
题目 最小子串覆盖 给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串. 样例 给出source = "ADOBECODEBANC ...
- lintcode 中等题:Simplify Path 简化路径
题目 简化路径 给定一个文档(Unix-style)的完全路径,请进行路径简化. 样例 "/home/", => "/home" "/a/./b ...
- lintcode 中等题:Letter Combinations of a Phone Number 电话号码的字母组合
题目 电话号码的字母组合 给一个数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合. 下图的手机按键图,就表示了每个数字可以代表的字母. 样例 给定 "23" 返回 [& ...
- 97. Interleaving String(字符串的交替连接 动态规划)
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...
- 【Lintcode】029.Interleaving String
题目: Given three strings: s1, s2, s3, determine whether s3 is formed by the interleaving of s1 and s2 ...
- 097 Interleaving String 交错字符串
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的.例如,给定:s1 = "aabcc",s2 = "dbbca",当 s ...
- lintcode 中等题:partition array 数组划分
题目 数组划分 给出一个整数数组nums和一个整数k.划分数组(即移动数组nums中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中第一个位置i, ...
随机推荐
- 转: js操作cookie
cookie的几个概念 http://dearhappyfish.blog.163.com/blog/static/1901094152012422114753777/ js操作cookie 转:ht ...
- sql server 中 bigint 和 datetime 性能比较
-- 创建表 create table Test_tbl ( ID varchar(40) primary key nonclustered, IntCol int, DateCol datetime ...
- zip生成
生成zip文件官方网站:http://www.phpconcept.net/pclzip/ 用法一: 1 <?php 2 include_once('pclzip.lib.php'); ...
- 集成环境wamp环境下 memcached的安装
早就听说过memcached,但是一直没实践过.所有今天有时间就搞了一下,哎废了我一上午才搞定!一上午啊,好丢人.特写记录一下 先说一下我遇到的问题:按照别人教程(还有好多)说的,安装后没有任何的错误 ...
- Mod 与 RequireJS/SeaJS 的那些事
本文的目的是为了能大让家更好的认识 Mod,之所以引入 RequireJS/SeaJS 的对比主要是应大家要求更清晰的对比应用场景,并不是为了比较出孰胜孰劣,RequireJS 和 SeaJS 都是模 ...
- 图片放大缩小(和ViewPager配合使用流畅显示)--第三方开源--PhotoView
图片的放大缩小实现效果是使用的github上的一个开源项目photoView实现的,下载地址:https://github.com/chrisbanes/PhotoView 下面看测试代码: acti ...
- pyQuery的安装
1. 直接通过pip安装 你会发现lxml怎么搞都报错,后来单独先安装libxml2和libxslt pip是找不到这个包的,只好百度.发现有很多的例子的解决方案.后来发现了个实用的. 2. 先安装l ...
- mysql基本知识---20151127-1
2015年11月27日,作为PHPer的我开始全面学习mysql数据库. 基本语法: 1.连接服务器: mysql>mysql -h host -u root -p 回车 输入密码(本地环境可以 ...
- PySide 简易教程<三>-------动手写起来
到目前为止,已经接触的Pyside的界面元素有如下几个:QWidget.QPushButton.QLabel.本次再介绍两个tooltip和messagebox.tooltip是一个鼠标悬浮提示信息, ...
- mac os去除去除.DS_Store文件--使用python和go(原创)
.DS_Store (英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮文件夹的自定义属性,例如文件们的图标位置或者是背景 ...