怎样看待LeetCode 28Implement strStr()( 二 )



运行的结果,提交结果那一栏的输入太长就不放出来了。class Solution {public: int strStr(string haystack, string needle) { if(needle == "") return 0; if(haystack.size() \u0026lt; needle.size()) return -1; for(string::size_type i = 0;i \u0026lt; haystack.size() - needle.size()+1;++i){ bool flag = true; for(string::size_type j = 0;j \u0026lt; needle != \u0026#39;\\0\u0026#39;;++j)//这一行的边界出错了; if(haystack != needle) {flag = false;break;} if(flag) return i; } return -1; }};这个估计是想让你自己实现一个而不是调用现成的,这样的话就能感受到出题人满满的恶意了,,,,
先说一声老夫用的C++,其它语言并不清楚是不是也这样。
它的用例里面有一个非常诡异,母串是上百个a,子串除了最后一个字母是b之外和母串完全一样。讲道理你这个a再多也并不影响程序运行啊,应该和“aa”,"ab"的情况没区别啊。然而实际情况却有点魔性,我写的程序aaaaaaa,aaaaaab和aaaaaaaaaaaaa,aaaaaaaaaaaab都正常运行,但a的长度再继续加长就不行了,运行结果就都成0了(应该是-1)。
【怎样看待LeetCode 28Implement strStr()】 到最后我都没找出来bug出在什么地方,最后实在怂了,就调用了标准库直接过了,,,,,

■网友
排序也能通过一行来实现,那现在是否还有必要去学习排序算法那?然而快速排序,堆排序等,一直是面试的热门话题。回到这个问题,这样的AC只能算是你搬了别人的算法来AC。刷Leetcode是为了面试,当你的面试官问你这个问题,你说,我能一行把它敲出来,但是他要的不是这一行代码,而是背后的原理,知其然还要知其所以然。当然,工作中如果有这样的需求,能用这一行代码来解决,肯定是很好的,但这并不意味着了解背后的原理是没有意义的。当研究一个开源的东西时,看源码会有很大的作用,了解背后的原理,才能更好的应用。


推荐阅读