97. Interleaving String

来源:互联网 发布:天津相声广播网络直播 编辑:程序博客网 时间:2024/06/05 03:02
class Solution {
public:
   bool isInterleave(string s1, string s2, string s3) {  
    int n1=s1.size(),n2=s2.size(),n3=s3.size();  
    if(n1+n2!=n3) return false;  
    vector<int> mp(255,0);  
    for(int i=0;i<n1;i++) mp[s1[i]]++;  
    for(int i=0;i<n2;i++) mp[s2[i]]++;  
    for(int i=0;i<n3;i++){  
        mp[s3[i]]--;  
        if(mp[s3[i]]<0) return false;  
    }  
    vector<vector<int> >dp(n1+1,vector<int>(n2+1,0));  
    dp[0][0] = 1;  
    for(int len = 1;len<=n3;len++){  
        for(int l=max(0,len-n2);l<=len&&l<=n1;l++){  
            if(l>0 && s1[l-1]==s3[len-1]) dp[l][len-l] |= dp[l-1][len-l];  
            if(len-l>0 && s2[len-l-1]==s3[len-1]) dp[l][len-l] |= dp[l][len-l-1];  
        }  
    }  
    return dp[n1][n2]==1;  
}
};
原创粉丝点击