LeetCode - 28. Implement strStr()

简介: 28. Implement strStr()  Problem's Link  ---------------------------------------------------------------------------- Mean:  给定两个字符串str1和str2,输出str2在str1中第一次出现的下标.

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;
}
/*

*/

 

目录
相关文章
|
7月前
|
算法 C++ 索引
leetcode-28:实现 strStr()(字符串匹配,暴力匹配算法和KMP算法)
leetcode-28:实现 strStr()(字符串匹配,暴力匹配算法和KMP算法)
81 0
|
2月前
【LeetCode 21】28. 实现 strStr()
【LeetCode 21】28. 实现 strStr()
34 0
|
6月前
|
SQL 算法 数据可视化
Leetcode第28题:实现 strStr()【python】
Leetcode第28题:实现 strStr()【python】
LeetCode-28 实现strStr() KMP算法的学习
LeetCode-28 实现strStr() KMP算法的学习
|
算法 安全 Java
LeetCode - #28 实现 strStr()
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
算法 Java C语言
leetcode:28.实现strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
79 0
leetcode 28 找出字符串第一个匹配的下标(KMP实现strStr)
leetcode 28 找出字符串第一个匹配的下标(KMP实现strStr)
91 0
leetcode 28 找出字符串第一个匹配的下标(KMP实现strStr)
|
存储 前端开发 算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
165 0
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
|
存储
LeetCode 232. Implement Queue using Stacks
使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。
78 0
LeetCode 232. Implement Queue using Stacks
LeetCode 225. Implement Stack using Queues
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈; pop() -- 移除栈顶元素; top() -- 获取栈顶元素; empty() -- 返回栈是否为空
84 0
LeetCode 225. Implement Stack using Queues