1.注意区别sizeof和.size的区别,一个是取得所占字节数,一个是字符串的长度
2.注意算法的逻辑,容易出现的错误解法
bool isInterleave(string s1, string s2, string s3) {
int len1 = s1.size();
int len2 = s2.size();
int len3 = s3.size();
if (len3 != len1 + len2)
{
return false;
}
int i = 0, j = 0;
for (int k = 0; k < len3; ++k)
{
if (s3[k] == s1[i])
{
++i;
}else
{
if (s3[k] == s2[j])
{
++j;
}
else
return false;
}
}
return true;
}
问题描述:
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 = "aabcc"
,
s2 = "dbbca"
,
When s3 = "aadbbcbcac"
, return true.
When s3 = "aadbbbaccc"
, return false.
核心思想:
isInterleaving(s1,len1,s2,len2,s3,len3) = (s3.lastChar == s1.lastChar) && isInterleaving(s1,len1 - 1,s2,len2,s3,len3 - 1) ||(s3.lastChar == s2.lastChar) && isInterleaving(s1,len1,s2,len2 - 1,s3,len3 - 1)
实现代码:
正确的还在写,明日再议