题目:

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

思路:

此处是C的实现,需要用到3个指针

/**

输入: haystack = "hello", needle = "ll"
1.使用双指针,指针i指向haystack的开始位置,指针j指向needle的开始位置
2.初始i=0,j=0,t=0。haystack[i]=h,needle[l]=l。以haystack串作为外循环
3.第一次循环判断,haystack[i]&&needle[j]有值满足条件,进入第一次循环
做判断haystack[i]=h等于needle[l]=l不成立,t=t+1=1,i=1,j=0
4.第二次循环判断,haystack[i]=e,needle[l]=l,haystack[i]&&needle[j]有值满足条件,进入第二次循环
做判断haystack[i]=e等于needle[l]=l不成立,t=t+1=2,i=2,j=0
5.第三次循环判断,haystack[i]=l,needle[l]=l,haystack[i]&&needle[j]有值满足条件,进入第三次循环
做判断haystack[i]=l等于needle[l]=l成立,i=3,j=1,continue接下来的代码不走,直接进入新的循环判断
6.第四次循环判断,haystack[i]=l,needle[l]=l,haystack[i]&&needle[j]有值满足条件,进入第四次循环
做判断haystack[i]=l等于needle[l]=l成立,i=4,j=2,continue接下来的代码不走,进入第五次循环
7.第五次循环判断,haystack[i]=e,needle[l]='\0',haystack[i]&&needle[j]不满足条件,跳出循环
8.判断needle[j] == '\0'满足条件,返回t=2,结束

代码:

// 28. 实现 strStr().cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "stdlib.h" int strStr(char * haystack, char * needle){
int i = ,j =,t=i;//一定要有t
while (haystack[i]&&needle[j]){
if (haystack[i] == needle[j]){
i++;
j++;
continue;
//C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。
} else{
t=t+;
i=t;
j=;
}
}
//如果needle串到了结尾的时候,代表顺利找到
if (needle[j] == '\0'){
return t;
}
//否则返回-1,没找到
return -;
} int _tmain(int argc, _TCHAR* argv[])
{ int strStr(char * haystack, char * needle);
char *str1 = (char*)malloc();
char *str2 = (char*)malloc();
// char *str = NULL; 错误的用法
scanf("%s %s",str1,str2);
int result=strStr(str1, str2);
printf("%d",result);
system("pause");
return ;
}

<每日 1 OJ> -LeetCode 28. 实现 strStr()的更多相关文章

  1. 前端与算法 leetcode 28.实现 strStr()

    # 前端与算法 leetcode 28.实现 strStr() 题目描述 28.移除元素 概要 这道题的意义是实现一个api,不是调api,尽管很多时候api的速度比我们写的快(今天这个我们可以做到和 ...

  2. Java实现 LeetCode 28 实现strStr()

    28. 实现 strStr() 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 ...

  3. 44. leetcode 28. Implement strStr()

    28. Implement strStr() Implement strStr(). Returns the index of the first occurrence of needle in ha ...

  4. [LeetCode] 28. Implement strStr() 实现strStr()函数

    Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...

  5. LeetCode 28 Implement strStr() (实现找子串函数)

    题目链接: https://leetcode.com/problems/implement-strstr/?tab=Description   Problem : 实现找子串的操作:如果没有找到则返回 ...

  6. Leetcode #28. Implement strStr()

    Brute Force算法,时间复杂度 O(mn) def strStr(haystack, needle): m = len(haystack) n = len(needle) if n == 0: ...

  7. Java [leetcode 28]Implement strStr()

    题目描述: Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if ...

  8. [LeetCode] 28. Implement strStr() 解题思路

    Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...

  9. Leetcode 28——Implement strStr()

    Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...

随机推荐

  1. Python面向对象封装案例

    01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 ...

  2. Eureka设计原理

    1. Eureka设计原理 1.1. 前言 目前我越来越关注技术原理层面的东西,开始考虑中间件设计背后,要考虑哪些因素,为什么要这样设计,有什么优化的地方,这次来讨论Eureka 1.2. 设计问题 ...

  3. element-ui Upload 上传获取当前选择的视频时长

    <el-upload class="upload-demo" ref="vidos" :action="URL+'/api/post/file' ...

  4. 《JavaScript高级程序设计》笔记:附录A ECMAScript Harmony

    一般性变化 常量 用const关键字声明常量,声明的变量在初始赋值后,就不能进行修改了,如下代码: const MAX_SIZE = 25; MAX_SIZE = 10; //报错 块级作用域及其他作 ...

  5. vue之使用echarts

    在main中 //import ElementUI from 'element-ui' //import 'element-ui/lib/theme-chalk/index.css' import e ...

  6. 08-Vuex

    Vuex 一.简介 ① 是什么:是一个状态管理工具,存放项目组件中的公共数据 二.使用语法 ① 语法 -1. 创建 Vuex 实例 const store = new Vuex.Store({ sta ...

  7. springboot:使用JPA-Hibernate

    步骤: 在pom.xml文件中添加mysql,spring-data-jpa的依赖. <!-- 添加mysql数据库驱动依赖--> <dependency> <group ...

  8. springboot使用阿里fastjson来解析数据

    1.spring boot默认使用的json解析框架是jackson,使用fastjson需要配置,首先引入fastjson依赖 pom.xml配置如下: <project xmlns=&quo ...

  9. iview引用自定义的图标

    在vue脚手架中,目前项目使用的iview里面的图标,不够满足,需要自定义加入图标. 在阿里图标库:https://www.iconfont.cn 然后把本项目需要的图标可以放在里面. 然后将icon ...

  10. cad 画图面板的尺寸大小定义

    输入limits 输入左下角点为 0,0 输入右上角点为大家需要的数  这里为100,50 输入zoom 输入a 就可以实现自定义编辑 注意事项 如果在你已经操作过的图纸上可能会失效 重新建一张图纸就 ...