Interleaving String(문자열 조합, 동적 계획)[leetcoode]

1192 단어 LeetCode동적 기획
제목: 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.
문제는 s3이 s1과 s2를 엇갈려 혼합할 수 있는지, 문자 간의 상대적인 순서는 바꿀 수 없다는 것이다.동적 기획으로 dp[i][j]는 s3의 전(i+j) 문자가 s1의 전 i 문자와 s2의 전 j 문자로 구성될 수 있는지를 나타낸다.
점차적으로 미루는 것은 그리 복잡하지 않으니 코드를 보아라.
class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) { 
        int l1=s1.size(),l2=s2.size(),l3=s3.size();
        if(l1+l2!=l3)return false;
        bool dp[1000][1000];
        for(int i=0;i<=l1;++i)for(int j=0;j<=l2;++j)
        {
            if(i==0&&j==0)dp[0][0]=true;
            else if(i==0)dp[0][j]=dp[0][j-1]&(s2[j-1]==s3[j-1]);
            else if(j==0)dp[i][0]=dp[i-1][0]&(s1[i-1]==s3[i-1]);
            else 
            {
                dp[i][j]=(dp[i][j-1]&(s2[j-1]==s3[i+j-1]));
                dp[i][j]|=(dp[i-1][j]&(s1[i-1]==s3[i+j-1]));
            }
        }
        return dp[l1][l2];
    }
};

좋은 웹페이지 즐겨찾기