题目:

实现 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. 创建一个Phone实体,完成多页面的电话簿项目
  2. jQuery所支持的css样式
  3. UITableView的创建及其一些常用方法
  4. 【20160924】GOCVHelper 图像处理部分(1)
  5. (旧)子数涵数·PS ——素描效果
  6. liunx环境下的mysql数据库配置文件my.conf内的参数含义
  7. 如果设置Keil从C代码编译出来的hex文件地址从0x8000开始
  8. Sql Server 2012启动存储过程
  9. 再议Swift操作符重载
  10. selenium之多线程启动grid分布式测试框架封装(三)
  11. Node填坑教程——简易http服务器
  12. PC版模块滚动不显示滚动条效果
  13. 详解EBS接口开发之销售订单挑库发放
  14. timers模块
  15. 关于 X509Certificate2 程序发布IIS后找不到文件路径的问题
  16. macOS 10.14虚拟机安装教程
  17. [剑指Offer]36-二叉搜索树与双向链表
  18. 17秋 软件工程 团队第五次作业 Alpha Scrum4
  19. 《算法》第六章部分程序 part 1
  20. tarjan【模板】缩点

热门文章

  1. Spring Cloud的常规组件和简单实战(一)
  2. Guava入门
  3. 学习笔记之正则表达式 (Regular Expressions)
  4. Vue.js前端MVVM框架实战篇
  5. input限制输入
  6. Maven项目中jstl表达式失效
  7. 【Iterm2】如何解决iterm2窗口自动隐藏的问题
  8. Httpd服务入门知识-使用mod_deflate模块压缩页面优化传输速度
  9. loadrunner自动订票脚本通用;loadrunner脚本参数化,设置检查点
  10. 【大数据】设置SSH免密钥(转)