題目是leetcode97
給定三個字符串 s1, s2, s3, 驗(yàn)證 s3 是否是由 s1 和 s2 交錯組成的。
示例 1:
輸入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"輸出: true示例 2:
輸入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"輸出: false
我想用遞歸去實(shí)現(xiàn)(想先寫出來遞歸版本再用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;
}
}
結(jié)果答案不對,反復(fù)思考發(fā)現(xiàn)應(yīng)該沒有問題,隨用C++實(shí)現(xiàn)了一個版本:
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;
}
}
結(jié)果答案正確 返回true。
一開始以為是Java哪里打錯了,于是將C++ 通過的版本復(fù)制到eclipse內(nèi),然后利用替換字符,將at替換成chatAt,substr替換成substring,結(jié)果答案還是和C++版本的不同。 隨考慮到是api問題,然后查了substr和substring charAt和at的區(qū)別,發(fā)現(xiàn)并沒有什么問題。
但是這道題目始終答案不一致,求各位大神指點(diǎn)一下!
解決了 我就是個垃圾
解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾解決了 我就是個垃圾
請教一道算法問題問題! C++的實(shí)現(xiàn)和Java的實(shí)現(xiàn)結(jié)果不一致
慕碼人8056858
2019-01-16 02:41:46