首页 > 编程语言 > 详细

[LeetCode]题解(python):097-Interleaving String

时间:2016-02-24 22:37:41      阅读:355      评论:0      收藏:0      [点我收藏+]

题目来源:

  https://leetcode.com/problems/interleaving-string/


 

题意分析:

  给定字符串s1,s2,s3,判断s3是否由s1和s2穿插组成。如“abc”由“ac”,“b”组成,而“cba”不是。


 

题目思路:

  这是一个动态规划问题。令ans[i][j]为s1[:i]和s2[:j]匹配是否成功。那么动态方程是if s1[i - 1] == s3[i + j - 1] 那么ans[i][j] = ans[i][j] or ans[i - 1][j];if s2[j - 1] ==  s3[i + j - 1] 那么ans[i][j] = ans[i][j] or ans[i][j - 1]。


 

代码(python):

  

技术分享
class Solution(object):
    def isInterleave(self, s1, s2, s3):
        """
        :type s1: str
        :type s2: str
        :type s3: str
        :rtype: bool
        """
        i,j,k = 0,0,0
        m,n,t = len(s1),len(s2),len(s3)
        if m + n != t:
            return False
        ans = [[False for i in range(n+1)] for j in range(m+1)]
        ans[0][0] = True
        for i in range(1,m+1):
            if s1[i - 1] == s3[i - 1]:
                ans[i][0] = True
            else:
                break
        for i in range(1,n + 1):
            if s2[i - 1] == s3[i -1]:
                ans[0][i] = True
            else:
                break
        for i in range(1,m + 1):
            for j in range(1,n + 1):
                if s1[i - 1] == s3[i + j - 1]:
                    ans[i][j] = ans[i][j] or ans[i - 1][j]
                if s2[j - 1] == s3[i + j - 1]:
                    ans[i][j] = ans[i][j] or ans[i][j - 1]
        return ans[m][n]
        
View Code

 

[LeetCode]题解(python):097-Interleaving String

原文:http://www.cnblogs.com/chruny/p/5215308.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!