zoukankan      html  css  js  c++  java
  • leetcode--Implement strStr()

    1.题目描述

    Implement strStr().
     
    Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.

    2.解法分析

    KMP算法的一个应用而已,KMP算法见我的另一篇文章,以下是KMP算法应用在这个题目中。

    class Solution {
    public:
        char *strStr(char *haystack, char *needle) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            if(needle==NULL)return needle;
            if(needle[0]=='')return haystack;
            
            int i=0;int j=0;
            vector<int>p=prepressing(needle);
            int len=p.size();
            
            while(haystack[i]!='')
            {
                if(j==len)
                {
                    return &haystack[i-len];
                }
                
                if(haystack[i]==needle[j])
                {
                    i++;j++;   
                }
                else
                {
                    while(j!=0&&needle[j]!=haystack[i])j=p[j-1];
                    
                    if(j==0&&needle[j]!=haystack[i])i++;
                }
            }
            
            if(j==len)
            {
                return &haystack[i-len];
            }
            return NULL;
            
            
        }
        
        vector<int> prepressing(char *needle)
        {
            //ret[i]存放的是needle的前i+1个字符能再次利用的长度
            vector<int> ret;
            ret.push_back(0);
            int i=1;
            while(needle[i]!='')
            {
                ret.push_back(0);
                int j=ret[i-1];
                while(needle[i]!=needle[j]&&j!=0)
                {
                    j=ret[j-1];
                }
                
                if(needle[i]==needle[j])j++;
                
                ret[i]=j;
                i++;
            }
            
            return ret;
        }
    };
  • 相关阅读:
    cpp 模版函数
    叉积
    利用scrollTop 制作图片无缝滚动
    事件绑定和时间取消
    闭包写法
    增加类,删除类,查找类
    获取元素到页面上的位置
    在IE8中如何通过javascripts改变<style />中的内容?
    有关app的一些小知识
    获取页面高宽知识
  • 原文地址:https://www.cnblogs.com/obama/p/3278833.html
Copyright © 2011-2022 走看看