LintCode交叉字符串

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

样例
比如 s1 = "aabcc" s2 = "dbbca"

- 当 s3 = "aadbbcbcac",返回  true.

- 当 s3 = "aadbbbaccc", 返回 false.

挑战
要求时间复杂度为O(n^2)或者更好

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) {
        if(null == s1 || null == s2 || null == s3 || s1.length() + s2.length() != s3.length())
            return false;
        if(s1.length() <= 0 && s2.length() <= 0 && s3.length() <= 0)
            return true;
        
        boolean[][] common = new boolean[s1.length() + 1][s2.length() + 1];
        for(int i = 1;i <= s1.length();i++)
        {
            if(s1.charAt(i - 1) == s3.charAt(i - 1))
            {
                common[i][0] = true;
            }
        }
        
        for(int i = 1;i <= s2.length();i++)
        {
            if(s2.charAt(i - 1) == s3.charAt(i - 1))
            {
                common[0][i] = true;
            }
        }
        
        for(int i = 1;i <= s1.length();i++)
        {
            for(int j = 1;j <= s2.length();j++)
            {
                if(s1.charAt(i - 1) == s3.charAt(i + j - 1))
                {
                    common[i][j] = common[i - 1][j];
                }
                
                if(common[i][j])
                {
                    continue;
                }
                
                if(s2.charAt(j - 1) == s3.charAt(i + j - 1))
                {
                    common[i][j] = common[i][j - 1];
                }
            }
        }
        return common[s1.length()][s2.length()];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成 样例比如 s1 = "aabcc" s2...
    六尺帐篷阅读 780评论 0 1
  • 题目 给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成 样例比如 s1 = "aabcc" s2...
    六尺帐篷阅读 597评论 0 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,782评论 0 33
  • 为什么有些人听不懂话。 你说"这么晚了快睡吧",室友说"啊没事我习惯了" 难道非要说的太直白"你个傻逼影响劳资睡觉...
    小莫MoMo阅读 472评论 0 0
  • 烈日迎头立似弓,暖风触面汗如洪。 军令训厉强身志,不做凉屋怕苦虫。
    萧竺阅读 1,688评论 0 2