博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode28_C++实现strStr()函数
阅读量:6241 次
发布时间:2019-06-22

本文共 1586 字,大约阅读时间需要 5 分钟。

实现  函数。

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

示例 1:

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

示例 2:

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

说明:

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

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


 

思路:以haystack="mississippi" ,needle="issip"为例子..

1.判断needle长度是否小于haystack

2.判断2个字符串为空的情况

3.判断正常情况

  a.如果haystack(i)==needle(j),则j++。若不相同,则i需要回到之前判断的数的后一位,也就是+1。

  如:

      i:        0   1    2    3   4   5  6   7  8   9   10(数组下标)

haystack :      m   i    s    s    i   s   s   i   p    p   i

needle    :             i    s    s    i   p    

haystack(5)与needle(5)不相同,则又要重新循环,既,haystack(2)开始循环。

      i:       0  1    2    3   4   5  6   7  8   9   10(数组下标)

haystack :      m   i    s    s   i   s   s   i   p    p   i

needle    :                  i     s   s   i    p    

 

     .............以此类推

 

      i:       0  1    2    3   4   5  6   7  8   9   10(数组下标)

haystack :      m   i    s    s   i   s   s   i   p    p   i

needle    :                             i   s   s    i   p    

 

如果, j的长度与needle相同,则返回 i-needle的长度。

 

 

class Solution {public:    int strStr(string haystack, string needle) {        if (needle.size()==0)            return 0;        if (needle.size() > haystack.size())            return -1;        int j=0;//用来指向needle的字符串        int i=0;        for (i = 0; i < haystack.size(); i++) {            if (j==needle.size()){
//如果已经匹配完成则返回 return i - needle.size(); } if (haystack[i] == needle[j]){ j++; } else{ i -= j; j=0; } } //用来判断单个字母的时候,j++之后j=1,i=1; if (j==needle.size()){ return i - needle.size(); } return -1; }};

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/tianjiale/p/10199587.html

你可能感兴趣的文章
深入Spring Boot:ClassLoader的继承关系和影响
查看>>
Android带有删除按钮的EditText:EditTextWithDeleteButton
查看>>
2:C#TPL探秘
查看>>
Android Segmented RadioButton
查看>>
Java中菜单组件
查看>>
git reset revert 回退回滚取消提交返回上一版本
查看>>
适配mpvue平台的的微信小程序日历组件mpvue-calendar
查看>>
Consul Config 使用Git做版本控制的实现
查看>>
我们必须要知道的RESTful服务最佳实践
查看>>
百度调整Q2营收预期
查看>>
阿里巴巴智慧建筑(IB)峰会 与筑梦者共建新生态
查看>>
Apache Zeppelin安装及使用
查看>>
Redis实现微博后台业务逻辑系列(四)
查看>>
Power5连接使用DS8000遇到问题处理一例
查看>>
迈克菲实验室:Flame病毒的深度分析
查看>>
用十条命令在一分钟内检查Linux服务器性能[转]
查看>>
深入理解bash及字符串的处理
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
DNS多点部署IP Anycast+BGP实战分析
查看>>
iostat详细使用
查看>>