8.交叉字符串

题目:给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。

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 here
      if (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));
        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]);
        for (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])
                    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()];
    }
};

时间: 2024-11-06 09:36:54

8.交叉字符串的相关文章

LintCode——交叉字符串

描述:给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成. 样例:s1 = "aabcc" s2 = "dbbca" - 当 s3 = "aadbbcbcac",返回  true. - 当 s3 = "aadbbbaccc", 返回 false. Java 1 public class Solution { 2 /** 3 * @param s1: A string 4 * @param s2: A strin

Interleaving String,交叉字符串,动态规划

问题描述: Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = "aabcc",s2 = "dbbca", When s3 = "aadbbcbcac", return true.When s3 = "aadbbbaccc", return false. 算法分析: “When

Lintcode--006(交叉字符串)

Given three strings: s1, s2, s3, determine whether s3 is formed by the interleaving of s1 and s2. Example For s1 = "aabcc", s2 = "dbbca" When s3 = "aadbbcbcac", return true. When s3 = "aadbbbaccc", return false. Cha

交叉字符串

代码: 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 here if(s3.lengt

LintCode刷题笔记-- InterLeaving

动态规划 解题思路 1. 这道题最重要的是,存在三个字符串,但是并不需要两个二维矩阵来进行解,因为可以使用i+j-1来代表s3的下标,这样就可以通过i和j来遍历s3了.因为对于任何一个合法的交叉字符串都会有,s3(i+j-1)=s1(i-1) 或者s3(i+j-1) = s2(j-1) 2. 所以对于动态规划矩阵就可以在s1,s2这两个向量上进行分解,有dp[i][j], 其所代表的意义的是在s3(i+j-1)的位置上是否存在有s1(i)或者s2(j)与其相等, 3.如果结果返回true,证明是

2017校招常考算法题归纳&amp;典型题目汇总

2017校招即将来临,我们为大家整理了2017校招的常考算法类型,以及对应的典型题目. 另附参考答案地址:http://www.jiuzhang.com/solution/ 数学 尾部的零 斐波纳契数列 x的平方根 x的平方根 2 大整数乘法 骰子求和 最多有多少个点在一条直线上 超级丑数 比特位操作 将整数A转换为B 更新二进制位 二进制表示 O(1)时间检测2的幂次 二进制中有多少个1 动态规划 编辑距离 正则表达式匹配 交叉字符串 乘积最大子序列 二叉树中的最大路径和 不同的路径 通配符匹

[LeetCode] Interleaving String [30]

题目 Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 = "aabcc", s2 = "dbbca", When s3 = "aadbbcbcac", return true. When s3 = "aadbbbaccc", return false. 原题链接(点我) 解题

校招的常考算法类型以及对应的典型题目

数学 尾部的零斐波纳契数列x的平方根x的平方根2大整数乘法骰子求和最多有多少个点在一条直线上超级丑数 比特位操作 将整数A转换为B更新二进制位二进制表示O(1)时间检测2的幂次二进制中有多少个1 动态规划 编辑距离正则表达式匹配交叉字符串乘积最大子序列二叉树中的最大路径和不同的路径通配符匹配 堆 滑动窗口的中位数数据流中位数最高频的K个单词接雨水堆化排序矩阵中的从小到大第k个数 二叉树 二叉树中序遍历二叉树的序列化和反序列化子树最近公共祖先二叉树的层次遍历将二叉树拆成链表在二叉查找树中插入节点

关于字符串实现交叉合并字符串

交叉合并:如字符串一为:abcd  字符串二为:1234则结果为:a1b2c3d4 1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class A { 5 public static void main(String[] args) { 6 String a[] ={"a","b","c"}; 7 String b[] ={"1","