题目的链接在这里:https://leetcode-cn.com/problems/implement-strstr/
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
方法一是使用暴力还是就是双指针最后一种也是一种暴力
代码如下:
class Solution { public int strStr(String haystack, String needle) { //找到第一个位置 找不到返回-1 //先排除特殊情况 if(needle.equals("")) return 0; //首先第一种方法就是暴力 char hayChar[]=haystack.toCharArray(); char needChar[]=needle.toCharArray(); //用来返回最后的位置 int count=0; //用来做标记 boolean flag=false; for(int i=0;i<hayChar.length;i++){ //然后进行判断 if(hayChar[i]==needChar[0]){ //相当于是找到第一个位置了 //这里可能要做个标记吧 count=i; //这两个作为比较的暂存数据 int tempI=i; int tempN=0; while (tempI<hayChar.length&&tempN<needChar.length){ //只要条件符合一直判断 //把这个条件要放内部吧 if(hayChar[tempI]==needChar[tempN]) { tempI++; tempN++; } else{ break; } } //然后跳出循环之后 是不是得判断一下temp是不是到最后一个了 说明ok了 if(tempN==needChar.length){ //说明在最后一个 return count; } //不然就说明是有问题的 //这里有问题不能break } } //最后结果 return -1; } }
代码如下:
class Solution { public int strStr(String haystack, String needle) { if (needle.equals("")) return 0; //使用双指针 int left=0; int need=0; int index=0; while (left<haystack.length()&&need<needle.length()){ //就开始判断 if(haystack.charAt(left)==needle.charAt(need)){ //说明他们这个位置是可以的 就进行更新 //但是怎么存这个第一个位置呢 left++; need++; } //如果不相等的话 else{ //如果不相等的话 是要从当初的那个位置开始出发 而不是直接就从这边出发的 //所以是当初指定的起始位置加一的位置出发 //index作为起始位置 index++; left=index; need=0; } } //最后判断index有没有更新 并且最后的值是不是等于长度 return need==needle.length()?index:-1; } }
代码如下:
class Solution { public int strStr(String haystack, String needle) { //还有一个暴力判断的方法 char[] hay=haystack.toCharArray(); char[] need=needle.toCharArray(); //这里的特殊情况也都排除掉 if(need.length==0) return 0; if(haystack.equals(needle)) return 0; if(need.length>=hay.length) return -1; for(int i=0;i<=hay.length-need.length;i++){ //i是作为第一个数组 他最小一定是0 最大的话 也一定是 大的长度减去小的长度 //并在里面再进行一次循环 int j=0; for( j=0;j<need.length;j++){ //不用去管相等的时候 if(hay[i+j]!=need[j]){ //如果不相等了 离开退出 break; } } //还有一个是直接判断长度 //这个要拿出来判断 if(j==need.length) return i; } //这样子都没成功的话 return -1; } }