猿问

请教一道算法问题问题! C++的实现和Java的实现结果不一致

题目是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的区别,发现并没有什么问题。

但是这道题目始终答案不一致,求各位大神指点一下!

解决了 我就是个垃圾

解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾
解决了 我就是个垃圾

慕码人8056858
浏览 389回答 1
1回答

小唯快跑啊

==引发的血案?
随时随地看视频慕课网APP

相关分类

Java
我要回答