lintcode 容易题:strStr 字符串查找

题目:

字符串查找

字符串查找(又称查找子字符串),是字符串操作中一个很有用的函数。你的任务是实现这个函数。

对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。

如果不存在,则返回 -1

样例

如果 source = "source" 和 target = "target",返回 -1

如果 source = "abcdabcdefg" 和 target = "bcd",返回 1

挑战

O(n2)的算法是可以接受的。如果你能用O(n)的算法做出来那更加好。(提示:KMP)

说明

在面试中我是否需要实现KMP算法?

  • 不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。

解题:

Java程序:

Python程序:

时间: 2024-12-09 06:47:30

lintcode 容易题:strStr 字符串查找的相关文章

字符串函数(strcpy字符串拷,strcmp字符串比较,strstr字符串查找,strDelChar字符串删除字符,strrev字符串反序,memmove拷贝内存块,strlen字符串长度)

1.strcpy字符串拷贝拷贝pStrSource到pStrDest,并返回pStrDest地址(源和目标位置重叠情况除外) char *strcpy(char *pStrDest, const char *pStrSource) { assert(NULL!=pStrDest && NULL!=pStrSource); char *strTemp=pStrDest; while ((*pStrDest++ = *pStrSource++) != '\0'); return strTemp

LintCode刷题---旋转字符串

描述: 给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转) 样例: 输入: str="abcdefg", offset = 3 输出: str = "efgabcd" 样例解释: 注意是原地旋转,即str旋转后为"efgabcd" ...... 解题: 难点分析: ①字符串为 "" 的情况   ②偏移量 offset = 0   ③偏移量 offset 远大于字符串长度 前两种情况直接

[C语言】模拟实现库函数strstr,查找子字符串

//模拟实现库函数strstr,查找子字符串 #include <stdio.h> #include <assert.h> char * my_strstr( char *dst, const char * src) { assert(dst); assert(src); int i, j, k; for (i = 0; dst[i] != '\0'; i++) { for (j = i, k = 0; src[k] != '\0'&&dst[j] == src[k

编程实现字符串查找strstr,find

字符串查找两种情况,查找返回子字符串的指针位置和在字符串中的位置. 1. const char* strstr(const char* src, const char* sub) { if (src == NULL && sub == NULL) { return src; } const char* ps = src; const char* pb = sub; while (*src) { do { if (!*ps) { return src; } } while (*pb++ ==

leetcode | Implement strStr() | 实现字符串查找函数

Implement strStr() : https://leetcode.com/problems/implement-strstr/ Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 如:haystack = "bcbcda"; needle = "bcd" 则 return 2 解析:字符串查找函数,

字符串查找(二分和快排的运用)

Description 现在给你一个字典,再给出几个字符串,让你查找,这些字符串是否在其中. Input 第一行是两个整数M,N分别表示字典数和字符串数. 第2至第M+1行,每一行是一个字典. 第M+2至第M+2+N行是徐查找的字符串. (n<=10,0000, m<=20,0000, 字符串长度不超过10,且均为小写字母) Output 共N行,每行表示第i个字符串在不在字典中,用0表示不在,1表示在. Sample Input 5 3 acc cat multiply do will ac

一步一步写算法(之字符串查找 上篇)

原文:一步一步写算法(之字符串查找 上篇) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解.字符串的比较.字符串的拷贝.字符串的upper等等.另外一个经常使用但是却被我们忽视的功能就是字符串的查找.word里面有字符串查找.notepad里面有字符串查找.winxp里面也有系统自带的字符串的查找,所以编写属于自己的字符串查找一方面可以提高自己的自信心,另外一方面在某

一步一步写算法(之字符串查找 中篇)

原文:一步一步写算法(之字符串查找 中篇) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 昨天我们编写了简单的字符查找函数.虽然比较简单,但是也算能用.然而,经过我们仔细分析研究一下,这么一个简单的函数还是有改进的空间的.在什么地方改进呢?大家可以慢慢往下看. 下面的代码是优化前的代码,现在再贴一次,这样分析起来也方便些: char* strstr(const char* str, char* data) { int index; in

一步一步写算法(之字符串查找 下篇)

原文:一步一步写算法(之字符串查找 下篇) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们谈到了KMP算法,但是讲的还不是很详细.今天我们可以把这个问题讲的稍微详细一点.假设在字符串A中寻找字符串B,其中字符串B的长度为n,字符串A的长度远大于n,在此我们先忽略. 假设现在开始在字符串A中查找,并且假设双方在第p个字符的时候发现查找出错了,也就是下面的情况: /* * A: A1 A2 A3 A4 ... Ap ........