为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2019-01-16 02:41:46
题目是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的区别,发现并没有什么问题。 但是这道题目始终答案不一致,求各位大神指点一下! 解决了 我就是个垃圾 解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾解决了 我就是个垃圾
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

==引发的血案?

查看完整回答
反对 回复 2019-02-12
  • 1 回答
  • 0 关注
  • 388 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信