[LeetCode] Interleaving String

1. 是一个很明显的动态规划题。

2. s3中的每个字符不是s1中的就是s2中的,只要根据它之前的状态做转移就可以。

 1 class Solution {
 2 public:
 3     bool isInterleave(string s1, string s2, string s3) {
 4         int n = s1.size();
 5         int m = s2.size();
 6         if (n + m != s3.size()) return false;
 7         vector<vector<int>> f(n+1, vector<int>(m+1));
 8         for (int i = 0; i <= n; i++) {
 9             for (int j = 0; j <= m; j++) {
10                 int idx = i + j - 1;
11                 if (i == 0 && j == 0) {
12                     f[i][j] = 1;
13                 } else {
14                     if (i && s1[i-1] == s3[idx]) f[i][j] |= f[i-1][j];
15                     if (j && s2[j-1] == s3[idx]) f[i][j] |= f[i][j-1];
16                 }
17             }
18         }
19         return f[n][m];
20     }
21 };

 

posted @ 2017-03-03 00:01  zeeroo32  阅读(133)  评论(0编辑  收藏  举报