您的位置:首页 > 其它

LeetCode: Interleaving String

2013-05-29 11:18 435 查看
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.

Naive solution:

Recursion

if (s1[0] == s3[0]  && isInterteaving(s1[1], s2, s3[1]))

    return true;

if (s2[0] == s3[0]  && isInterleaving(s1, s2[1], s3[1]))

    return true;

return false;

Using recursion, a lot of case will be evaluated multiple times, thus, complexity grows exponentially.  Use DP will solve.  We actually need to calculate

(s1[0], s2[0]), (s1[1], s2[0]), (s1[0], s2[1]), ....

Thus we could build a (m+1)*(n+1) array, m is s1 length and n is s2 length

if(s1[i]== s3[i+j] && dp[i+1][j])

    dp[i][j] = true;

else

    if(s2[j]==s3[j] && dp[i][j+1])

        dp[i][j] = true;

    else

        dp[i][j] = false

Pass large tests within 20 ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息