首页 > 其他 > 详细

Leetcode 28. Implement strStr()

时间:2016-01-20 12:37:22      阅读:167      评论:0      收藏:0      [点我收藏+]

 

 

 

Q:Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

 

 A: 本题追求代码简单省额外空间则用nested loop; 追去快则用KMP以及其他基于FSA的方法,但是需要额外空间。

 

 方法1:  java version 1
public class Solution {
    public int strStr(String haystack, String needle) {
        if (haystack == null || needle == null || haystack.length() < needle.length()) return -1;
        int res = -1;
        int m = haystack.length();
        int n = needle.length();
        
        for(int j = 0 ; j <= m - n; j ++){
            
            int i;
            for(i = 0; i < n; i++){
                if (needle.charAt(i) != haystack.charAt(i+j)) break;
            }
            if (i == n ){
                res = j;
                break;
            }
        }
        return res;
    }
}

 

方法1: python version 1

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        m = len(haystack)
        n = len(needle)
        if m < n:
            return -1 
        if n == 0:
            return 0
        for j in range(m-n+1):
            for i in range(n):
                if needle[i] != haystack[i+j]:
                    break
            if needle[i] == haystack[i+j]:
                return j
        return -1

  

  

 

方法2: java version 1

    public int strStr(String source, String target){
        if (source == null || target == null) return -1;
        if (target.length() == 0) return 0;
        
        int N = source.length();
        int M = target.length();       
        int i, j; 
        
        int[][] dfa = buildDFA(target);
        
        for(i = 0, j = 0; i < N && j < M; i++){
            j = dfa[source.charAt(i)][j];
        }
        if (j == M ) return i - j;
        else return -1;
        
    }
   
    public int[][] buildDFA(String target){
        int M = target.length();
        int R = 256;
        
        int[][] dfa = new int[R][M];
        dfa[target.charAt(0)][0] = 1;
        
        for(int X = 0, j = 1; j < M; j++){
            for(int i = 0; i < R; i++){
                dfa[i][j] = dfa[i][X];   
            }
            dfa[target.charAt(j)][j] = j + 1;
            X = dfa[target.charAt(j)][X];
        }
        return dfa;
    }

  

 

Leetcode 28. Implement strStr()

原文:http://www.cnblogs.com/nobody2somebody/p/5144551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!