Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
Solution:
We first preprocess the needle, in such a way that we obtain the equivalent states, for instance:a a b a a b c 0 0 1 0 1 2 3That means that if we are have found aabaab, we have also found aab. When we process the haystack, when we arrive to a state that we cannot go on, we change to its previous equivalent state.
public class Solution { public String strStr(String haystack, String needle) { if(needle.length()==0) return haystack; int[] previousState = new int[needle.length()]; previousState[0] = 0; int previousEqState=0; for(int i=1; i<needle.length(); i++) { previousState[i] = previousEqState; if(needle.charAt(i)==needle.charAt(previousEqState)) previousEqState++; else previousEqState = 0; } int lettersFound = 0; int position = 0; while(position<haystack.length()) { if(haystack.charAt(position) == needle.charAt(lettersFound)) { position++; lettersFound++; if(lettersFound == needle.length()) return haystack.substring(position-needle.length()); } else { if(lettersFound>0) lettersFound = previousState[lettersFound]; else position++; } } return null; } }
No comments :
Post a Comment