C/C++描述 LeetCode97. 交错字符串

  大家好,我叫亓官劼(qí guān jié )


题目

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1s2 交错组成的。

示例 1:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true

示例 2:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false

题解

class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int len_1 = s1.length();
int len_2 = s2.length();
int len_3 = s3.length();
// 长度不同
if(len_1 + len_2 != len_3)
return false;
// 竖着为s1 横着为s2 形成一个网格,对网格进行搜索,只可以向右或者向下前进
bool dp[1004][1004] = {false};
dp[0][0] = true;
// s1前面与s3重合的子串进行赋值
for(int i = 1; i <= len_1 && s1[i-1]==s3[i-1]; i++)
dp[i][0] = true;
// s2前面与s3重合的子串进行赋值
for(int i = 1; i <= len_2 && s2[i-1]==s3[i-1]; i++)
dp[0][i] = true;
// 对s1 s2进行搜索
for(int i = 1; i <= len_1; i++){
for(int j = 1; j <= len_2; j++){
dp[i][j] = (dp[i-1][j] && s1[i-1] == s3[i+j-1]) | (dp[i][j-1] && s2[j-1] == s3[i+j-1]);
}
}
return dp[len_1][len_2];
}
};