NC346. 交错的字符串
描述
示例1
输入:
"abc","defgh","abcdef"
输出:
false
示例2
输入:
"abd","cefgh","abcdefgh"
输出:
true
说明:
ab+c+d+efghC++ 解法, 执行用时: 6ms, 内存消耗: 524KB, 提交时间: 2022-04-15
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @param s3 string字符串 * @return bool布尔型 */ bool stringJudge(string s1, string s2, string s3) { // write code here int len1=s1.size(); int len2=s2.size(); int len3=s3.size(); vector<vector<bool>>dp(len1+1,vector<bool>(len2+1,false)); dp[0][0]=true; for(int i=1;i<=len1;i++){ if(s1[i-1]!=s3[i-1]){ break; } dp[i][0]=true; } for(int j=1;j<=len2;j++){ if(s2[j-1]!=s3[j-1]){ break; } dp[0][j]=true; } for(int i=1;i<=len1;i++){ for(int j=1;j<=len2;j++){ if(dp[i-1][j] && s1[i-1]==s3[i+j-1] || (dp[i][j-1] && s2[j-1]==s3[i+j-1])){ dp[i][j]=true; } } } if(dp[len1][len2]){ return true; }else{ return false; } } };
C++ 解法, 执行用时: 6ms, 内存消耗: 1416KB, 提交时间: 2022-03-11
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @param s3 string字符串 * @return bool布尔型 */ bool stringJudge(string s1, string s2, string s3) { // write code here bool dp[1005][1005]; memset(dp,0, sizeof(dp)); dp[0][0]=true; for(int i=0;i<=s1.size();i++) for(int j=0;j<=s2.size();j++) if((i>0&&s3[i+j-1]==s1[i-1]&&dp[i-1][j])||(j>0&&s3[i+j-1]==s2[j-1]&&dp[i][j-1])) dp[i][j]=true; return dp[s1.size()][s2.size()]; } };
C++ 解法, 执行用时: 7ms, 内存消耗: 520KB, 提交时间: 2022-06-27
class Solution { public: bool stringJudge(string s1, string s2, string s3) { int a = s1.size(); int b = s2.size(); int c = s3.size(); vector<vector<bool>> v(a + 1, vector<bool>(b + 1, false)); v[0][0] = true; for (int i = 1; i <= a; i++) { if (s1[i - 1] != s3[i - 1]) { break; } v[i][0] = true; } for (int j = 1; j <= b; j++) { if (s2[j - 1] != s3[j - 1]) { break; } v[0][j] = true; } for (int i = 1; i <= a; i++) { for (int j = 1; j <= b; j++) { if (v[i - 1][j] && s1[i - 1] == s3[i + j - 1] || (v[i][j - 1] && s2[j - 1] == s3[i + j - 1])) { v[i][j] = true; } } } if (v[a][b]) { return true; } else { return false; } } };
C++ 解法, 执行用时: 7ms, 内存消耗: 524KB, 提交时间: 2022-03-16
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @param s3 string字符串 * @return bool布尔型 */ bool stringJudge(string s1, string s2, string s3) { int i,j,len1=s1.length(),len2=s2.length(),len3=s3.length(); bool res=(len1+len2==len3); if(res) { vector<vector<bool>> dp(len1+1,vector<bool>(len2+1,false)); dp[0][0]=true; for(i=1;i<=len1&&s1[i-1]==s3[i-1];i++) dp[i][0]=true; for(i=1;i<=len2&&s2[i-1]==s3[i-1];i++) dp[0][i]=true; for(i=1;i<=len1;i++) for(j=1;j<=len2;j++) dp[i][j]=((s1[i-1]==s3[i+j-1]&&dp[i-1][j])|| (s2[j-1]==s3[i+j-1]&&dp[i][j-1])); res=dp[len1][len2]; } return res; } };
C++ 解法, 执行用时: 8ms, 内存消耗: 548KB, 提交时间: 2022-05-21
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @param s3 string字符串 * @return bool布尔型 */ bool stringJudge(string s1, string s2, string s3) { int n = s1.size(), m = s2.size(); if (n + m != s3.size()) return false; vector<vector<bool>> dp(n + 1, vector<bool>(m + 1)); dp[0][0] = true; for (int i = 0; i <= n; ++i) { for (int j = 0; j <= m; ++j) { if (i && dp[i - 1][j] && s1[i - 1] == s3[i + j - 1]) dp[i][j] = true; else if (j && dp[i][j - 1] && s2[j - 1] == s3[i + j - 1]) dp[i][j] = true; } } return dp[n][m]; } };