实现strStr()

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2

示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

说明:

needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

题目分析:

找第二个字符串在第一个字符串里面出现的第一个位置,则可以设置双指针,当第二个字符串的第一个字符在第一个字符串中出现时,则两个指针分别在两个字符串的此字符的下一个位置开始往后面对照比较,如果第二个字符串在第一个字符串里面,则返回指针开始的位置;否则返回-1。

代码实现:

public int strStr(String haystack, String needle) {
   if (needle.length() == 0)
       return 0;

   char[] charArrayHaystack = haystack.toCharArray();
   char[] charArrayNeedle = needle.toCharArray();

   for (int i = 0; i < charArrayHaystack.length; i++) {
       if (charArrayHaystack[i] == charArrayNeedle[0]){
           int j = i + 1;
           int k = 1;
           for (;k < charArrayNeedle.length && j < charArrayHaystack.length; k++) {
               if (charArrayHaystack[j] == charArrayNeedle[k])
                   j++;
               else
                   break;
           }
           if (k == charArrayNeedle.length)
               return i;
       }
   }

   return -1;
}

主函数:

public static void main(String[] args) {
   S1 s = new S1();
   int res = s.strStr("hello","ll");
   System.out.println(res);
}

运行结果:

2

你可能感兴趣的:(数据结构,strStr()函数,双指针,java,LeetCode)