交叉字符串
来源:互联网 发布:股市和楼市的关系 知乎 编辑:程序博客网 时间:2024/05/28 17:06
给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。
您在真实的面试中是否遇到过这个题?
Yes
样例
比如 s1 = "aabcc" s2 = "dbbca"
- 当 s3 = "aadbbcbcac",返回 true.
- 当 s3 = "aadbbbaccc", 返回 false.
点题:还是边界条件
class Solution {public: bool isInterleave(string s1, string s2, string s3) { if (s3.size() != s1.size() + s2.size()) { return false; } if (s1[0] != s3[0] && s2[0] != s3[0]) { return false; } vector<vector<bool>> dp(s1.size() + 1, vector<bool>(s2.size() + 1, false)); dp[0][0] = true; for (int i = 1; i <= s1.size(); i++) { if (s1[i - 1] == s3[i - 1]) { dp[i][0] = dp[i - 1][0]; } } for (int j = 1; j <= s2.size(); j++) { if (s2[j - 1] == s3[j - 1]) { dp[0][j] = dp[0][j - 1]; } } for (int i = 1; i <= s1.size(); i++) { for (int j = 1; j <= s2.size(); j++) { if (s3[i + j - 1] == s1[i - 1] && s3[i + j - 1] == s2[j - 1]) { dp[i][j] = dp[i][j - 1] || dp[i - 1][j]; } else if (s3[i + j - 1] == s1[i - 1]) { dp[i][j] = dp[i - 1][j]; } else if (s3[i + j - 1] == s2[j - 1]) { dp[i][j] = dp[i][j - 1]; } } } return dp[s1.size()][s2.size()]; }};
阅读全文