標籤:字串 子串 演算法 面試 java
【028-Implement strStr() (實現strStr()函數)】
【LeetCode-面試演算法經典-Java實現】【所有題目目錄索引】
原題
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
題目大意
實現實現strStr()函數,判斷一個字串在另一個字串中出現的位置。如果不匹配就返回-1。
解題思路
使用KMP演算法進行實現
代碼實現
演算法實作類別
public class Solution { public int strStr(String haystack, String needle) { if (haystack == null || needle == null) { return -1; } if (needle.length() > haystack.length()) { return -1; } if ("".equals(haystack)) { if ("".equals(needle)) { return 0; } else { return -1; } } else { if ("".equals(needle)) { return 0; } } return kmpIndex(haystack, needle); } private int kmpIndex(String haystack, String needle) { int i = 0; int j = 0; int[] next = next(needle); while (i < haystack.length() && j < needle.length()) { if (j == -1 || haystack.charAt(i) == needle.charAt(j)) { ++i; ++j; } else { j = next[j]; } } if (j == needle.length()) { return i - j; } else { return -1; } } private int[] next(String needle) { int[] next = new int[needle.length()]; next[0] = -1; int i = 0; int j = -1; int k = needle.length() - 1; while (i < k) { if (j == -1 || needle.charAt(i) == needle.charAt(j)) { ++i; ++j; if (needle.charAt(i) != needle.charAt(j)) { next[i] = j; } else { next[i] = next[j]; } } else { j = next[j]; } } return next; }}
評測結果
點擊圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中查看完整圖片。
特別說明
歡迎轉載,轉載請註明出處【http://blog.csdn.net/derrantcm/article/details/47052669】
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【LeetCode-面試演算法經典-Java實現】【028-Implement strStr() (實現strStr()函數)】