• LeetCode


    28. Implement strStr() 

    Problem's Link

     ----------------------------------------------------------------------------

    Mean: 

    给定两个字符串str1和str2,输出str2在str1中第一次出现的下标.

    analyse:

    KMP算法模板题.

    Time complexity: O(N)

     

    view code

    /**
    * -----------------------------------------------------------------
    * Copyright (c) 2016 crazyacking.All rights reserved.
    * -----------------------------------------------------------------
    *       Author: crazyacking
    *       Date  : 2016-02-19-16.45
    */
    #include <queue>
    #include <cstdio>
    #include <set>
    #include <string>
    #include <stack>
    #include <cmath>
    #include <climits>
    #include <map>
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    typedef long long(LL);
    typedef unsigned long long(ULL);
    const double eps(1e-8);


    class Solution
    {
    public:
       int Next[100005];
       void getNext(string& s)
       {
           Next[0]=0;
           for(int i=1,k=0;i<s.length();++i)
           {
               while(s[i]!=s[k] && k)
                   k=Next[k-1];
               if(s[i]==s[k])
                   ++k;
               Next[i]=k;
           }
       }
       int strStr(string haystack, string needle)
       {
           if(needle.length()==0)
               return 0;
           getNext(needle);
           for(int i=0,k=0;i<haystack.length();++i)
           {
               while(haystack[i]!=needle[k] && k)
                   k=Next[k-1];
               if(haystack[i]==needle[k])
                   ++k;
               if(k==needle.length())
                   return i-k+1;
           }
           return -1;
       }
    };

    int main()
    {
       string str1,str2;
       while(cin>>str1>>str2)
       {
           Solution solution;
           cout<<solution.strStr(str1,str2)<<endl;
       }
       return 0;
    }
    /*

    */
  • 相关阅读:
    Android实战:手把手实现“捧腹网”APP(一)-----捧腹网网页分析、数据获取
    容器云平台使用体验:数人云Crane(续)
    [React Native]升级React Native版本
    [React Native]去掉WebStorm中黄色警告
    数据库--mysql介绍
    缓存数据库-redis(补充)
    缓存数据库-redis(订阅发布)
    缓存数据库-redis(管道)
    缓存数据库-redis数据类型和操作(sorted set)
    缓存数据库-redis数据类型和操作(set)
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5201780.html
Copyright © 2020-2023  润新知