LeetCode28-实现strStr()(水题)
一开始的想法是
取needle的第一个字符开始呗,遇到合适的再比第二个。
如果是找到的话,肯定是一个个比对完了。
找不到的情况就是,needle字符串比haystack剩下的字符串长了。
能够跳的情况....算了,还是一步步来,这个不合适就比对下一个。
比如原串1112,子串112,不好跳。
要注意一些情况就行了
这里的begin设置的比较巧妙,减少了很多代码
public int strStr(String haystack, String needle) { //要找的是空,返回0 if(needle==null) return 0; //元字符是null,肯定是-1找不到 if(haystack==null) return -1; int len1 = haystack.length(); int len2 = needle.length(); //要找的比原来的长 if(len1<len2) return -1; if(len1==len2){ if(haystack.equals(needle)) return 0; else return -1; } //到了这个len1肯定比len2大了 if(len2==0) return 0; //到了这里,len1和len2都大于0 int begin = 0; while(len1-begin>=len2){ //假设存在 boolean exist = true; for(int i=begin,j=0;i<len1&&j<len2;i++,j++){ if(haystack.charAt(i)!=needle.charAt(j)){ exist = false; break; } } //正常跳出的话就是找到了 if(exist) return begin; begin++; } return -1; }
前面的都是用库函数的....