leetcode 28. 实现strStr()(Implement strStr())

版权声明:点个关注(^-^)V https://blog.csdn.net/weixin_41793113/article/details/86755593

 

实现 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() 定义相符。

原题链接

class Solution {
    public int strStr(String haystack, String needle) {
        return haystack.indexOf(needle);
    }
}
class Solution {
    public int strStr(String haystack, String needle) {
    	if(haystack==null || haystack.equals("") || haystack.length()<1)
    		return needle.equals("")?0:-1;
    	else if(needle==null || needle.equals("") || needle.length()<1)
    		return 0;
        return match(needle.toCharArray(),haystack.toCharArray());
    }
    
    static int match(char[] p,char[] T) {
    	int[] next = buildNext(p);
    	int n = T.length,m = p.length,i = 0,j = 0;
    	while(i<n) {
    		if(j<0 || T[i]==p[j]) {
    			i++;
    			j++;
    		} else
    			j = next[j];
            if(j==m)
                return i-j;
    	}
    	return -1;
    }
    static int[] buildNext(char[] p) {
    	int m = p.length,j=0;
    	int[] N = new int[m];
    	int t=N[0]=-1;
    	while(j<m-1) {
    		if(0>t ||  p[j]==p[t]) {
    			j++;
    			t++;
    			N[j]=(p[j]!=p[t])?t:N[t];
    		}
    		else
    			t = N[t];
    	}
    	return N;
    }
}

 

没有更多推荐了,返回首页