题目是leetcode97
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false
我想用递归去实现(想先写出来递归版本再用dp做),然后用java写出了以下版本:
public boolean isInterleave(String s1, String s2, String s3) {
int len1 = s1.length(), len2 = s2.length(), len3 = s3.length();
if (len2 == 0)
return s1 == s3;
else if (len1 == 0)
return s2 == s3;
else if (len3 == 0)
return len1 + len2 == 0;
else
{
if (s1.charAt(0) == s3.charAt(0) && s2.charAt(0) != s3.charAt(0))
return isInterleave(s1.substring(1), s2, s3.substring(1));
else if (s1.charAt(0) != s3.charAt(0) && s2.charAt(0) == s3.charAt(0))
return isInterleave(s1, s2.substring(1), s3.substring(1));
else if (s1.charAt(0) == s3.charAt(0) && s2.charAt(0) == s3.charAt(0))
return isInterleave(s1.substring(1), s2, s3.substring(1)) || isInterleave(s1, s2.substring(1), s3.substring(1));
else
return false;
}
}
结果答案不对,反复思考发现应该没有问题,随用C++实现了一个版本:
bool isInterleave(string s1, string s2, string s3) {
int len1 = s1.length(), len2 = s2.length(), len3 = s3.length();
if (len2 == 0)
return s1 == s3;
else if (len1 == 0)
return s2 == s3;
else if (len3 == 0)
return len1 + len2 == 0;
else
{
if (s1.at(0) == s3.at(0) && s2.at(0) != s3.at(0))
return isInterleave(s1.substr(1), s2, s3.substr(1));
else if (s1.at(0) != s3.at(0) && s2.at(0) == s3.at(0))
return isInterleave(s1, s2.substr(1), s3.substr(1));
else if (s1.at(0) == s3.at(0) && s2.at(0) == s3.at(0))
return isInterleave(s1.substr(1), s2, s3.substr(1)) || isInterleave(s1, s2.substr(1), s3.substr(1));
else
return false;
}
}
结果答案正确 返回true。
一开始以为是Java哪里打错了,于是将C++ 通过的版本复制到eclipse内,然后利用替换字符,将at替换成chatAt,substr替换成substring,结果答案还是和C++版本的不同。 随考虑到是api问题,然后查了substr和substring charAt和at的区别,发现并没有什么问题。
但是这道题目始终答案不一致,求各位大神指点一下!
解决了 我就是个垃圾
解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾
添加回答
举报
0/150
提交
取消