主串中查找子串,返回开始的位置

    1. package wg.interview;
    2. import java.util.Scanner;
    3. // 返回子串在主串中第pos开始的位置
    4. public class KMP {
    5. public static int getNext(String longStr, String shortStr){
    6. char[] main = longStr.toCharArray();
    7. char[] son = shortStr.toCharArray();
    8. int i = 0; // 主串当前位置下标处
    9. int j = 0; // 子串中当前位置下标值,子串从第一个开始
    10. while (i < main.length && j<son.length){
    11. if (main[i] == son[j]){
    12. i++;
    13. j++;
    14. }else {
    15. i = i-j+1; // 主串位置往后移动一位
    16. j = 0; // 子串继续回到起点
    17. }
    18. }
    19. if (j == son.length){
    20. return i-j;
    21. }else {
    22. return -1;
    23. }
    24. }
    25. public static void main(String[] args) {
    26. String shortStr = "abc";
    27. String longStr = "qqqabcdf";
    28. System.out.println("Found at: " + KMP.getNext(longStr,shortStr));
    29. }
    30. }