1 class Solution {
 2 public:
 3     bool isInterleave(string s1, string s2, string s3) {
 4         if(s3.size() != s1.size() + s2.size())
 5             return false;
 6         //create indicator
 7         vector<vector<bool> > match(s1.size() + 1, vector<bool>(s2.size() + 1, false));
 8         //initialization the first row and the first column
 9         match[0][0] = true;
10         for( int l1 = 1; l1 <= s1.size(); ++ l1 ) {
11             char c1 = s1[l1 - 1];
12             char c3 = s3[l1 - 1];
13             if (c1 == c3) {
14                 match[l1][0] = true;
15             } else 
16                 break;
17         }
18         for( int l2 = 1; l2 <= s2.size(); ++ l2 ) {
19             char c2 = s2[l2 - 1];
20             char c3 = s3[l2 - 1];
21             if (c2 == c3) {
22                 match[0][l2] = true;
23             } else 
24                 break;
25         }
26         //work through the rest of matrix using the formula
27         for( int l1 = 1; l1 <= s1.size(); ++ l1 ) {
28             char c1 = s1[l1 - 1];
29             for( int l2 = 1 ; l2 <= s2.size() ; ++ l2 ) {
30                 char c2 = s2[l2 - 1];
31                 int l3 = l1 + l2;
32                 char c3 = s3[l3 - 1];
33                 if (c1 == c3) {
34                     match[l1][l2] = match[l1 - 1][l2] || match[l1][l2];
35                 }
36                 if (c2 == c3) {
37                     match[l1][l2] = match[l1][l2 - 1] || match[l1][l2];
38                 }
39             }
40         }
41         //the last element is the result
42         return match[s1.size()][s2.size()];
43     }
44 };

 

posted on 2013-05-13 02:20  tanghulu321  阅读(129)  评论(0编辑  收藏  举报