LeetCode 97 交错字符串
Posted ambition-hhn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 97 交错字符串相关的知识,希望对你有一定的参考价值。
题目大意是给三个字符串,问前两个字符串进行交错是否可以组成第三个字符串。我的思路就是用动态规划来做,用一个数组dp[i][j]表示匹配s3前i+1个字符时,用了j个s1的字符,s2可以推倒出来是用了i+1-j个字符,所以不用再开一维,两维就够了,第一次做多开了一维,时间和空间消耗都很大。更新dp数组的公式dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1)和dp[i][j]=max(dp[i][j],dp[i-1][j]+1);分别是匹配s3索引为i的字符时,用s1去匹配和用s2去匹配,要注意字符串的界限,不要越界。这样子做时间空间消耗都非常低。
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int len1 = s1.length(),len2 = s2.length(),len3 = s3.length();
if(len3!=len1+len2) return false;
if(len3==0) return true;
int dp[len3+5][len1+5];
memset(dp,0,sizeof(dp));
if(s1[0]==s3[0]) dp[0][1]=1;
if(s2[0]==s3[0]) dp[0][0]=1;
for(int i=1;i<len3;i++)
{
for(int j=0;j<=len1&&j<=i+1;j++)
if(j<=len1&&i-j+1<=len2)
{
if(j>0&&s1[j-1]==s3[i])
dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
if(i>=j&&s2[i-j]==s3[i])
dp[i][j]=max(dp[i][j],dp[i-1][j]+1);
}
}
if(dp[len3-1][len1]==len3) return true;
else
return false;
}
};
以上是关于LeetCode 97 交错字符串的主要内容,如果未能解决你的问题,请参考以下文章