题目

28. 实现strStr()

题解

代码

import java.util.*;

public class code28 {

    // public static int strStr(String haystack, String needle) {
    // return haystack.indexOf(needle);
    // }

    // public static int strStr(String haystack, String needle) {
    // int n1 = haystack.length();
    // int n2 = needle.length();
    // if (n1 < n2) {
    // return -1;
    // } else if (n2 == 0) {
    // return 0;
    // }
    // for (int i = 0; i < n1 - n2 + 1; i++) {
    // if (haystack.substring(i, i + n2).equals(needle)) {
    // return i;
    // }
    // }
    // return -1;
    // }

    public static int strStr(String haystack, String needle) {
        int len1 = haystack.length();
        int len2 = needle.length();

        if (len1 < len2) {
            return -1;
        } else if (len2 == 0) {
            return 0;
        }

        int i = 0, j = 0;
        while (i < len1 && j < len2) {
            if (haystack.charAt(i) == needle.charAt(j)) {
                i++;
                j++;
            } else {
                i = i - j + 1;
                j = 0;
            }
            if (j == len2) {
                return i - j;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("请输入haystack字符串: ");
        String haystack = sc.nextLine();
        System.out.print("请输入needle字符串: ");
        String needle = sc.nextLine();
        int ans = strStr(haystack, needle);
        System.out.println(ans);
    }
}

参考

  1. 三种方法——题解一
  2. 内置函数就不写了,来个暴力破解,思路比较简单——题解二
  3. Java Scanner 类
  4. java–Scanner类的用法(next()和nextLine()的区别)
  5. java中scan.next()与scan.nextline()函数的使用与区别
  6. Scanner的next,nextint和nextLine的使用总结
  7. Java中next()方法与nextLine()的区别
  8. Java indexOf() 方法
  9. Java中indexof()的用法
  10. JAVA中的字符串的indexOf函数 和substring
  11. Java中字符串indexof() 的使用方法