2021-05-13

简介: 这篇文章解释了当针字符串(needle)为空时,字符串查找函数返回0的原因,并给出了相应的代码实现。

模式(暴力)匹配

写的第一个leetCode,感觉有点困难
实现 strStr() 函数。

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

说明:

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

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

示例 1:

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

输入:haystack = “aaaaa”, needle = “bba”
输出:-1
示例 3:

输入:haystack = “”, needle = “”
输出:0

提示:
0 <= haystack.length, needle.length <= 5 * 104
haystack 和 needle 仅由小写英文字符组成

1.统计两个字符串长度
2.BF模式匹配

int strStr(char * haystack, char * needle){
    //获取两个字符串长度
    int h_count=0;
    int n_count=0;
    while(haystack[h_count]!='\0')
    {
        h_count++;
    }
    while(needle[n_count]!='\0')
    {
        n_count++;
    }
    //子串为空返回0
    if (n_count==0)
    return 0;
    //母串为空返回-1
    if (h_count==0)
    return -1;
    //子串长度大于母串
    if(n_count>h_count)
    {
        return -1;
    }
     //BF暴力匹配
     //start记录匹配的位置
     int i,j,start;
     i=0,j=0;
     start=i;
     while(i<h_count&&j<n_count)
     {
         if(haystack[i]==needle[j])
         {
             i++;
             j++;
         }
         else  //回溯
         {
            j = 0;
            i = ++start;
         }
     }
     //如果j此时等于子字符串长度,返回匹配成功位置
   return j==n_count?start:-1;

}
相关文章
|
1天前
Leetcode第五题(最长回文子串)
这篇文章介绍了解决LeetCode第五题“最长回文子串”问题的一种方法,使用了中心扩展法来寻找给定字符串中的最长回文子串。
10 0
|
2月前
|
JavaScript
Vue3搜索框(InputSearch)
这篇文章介绍了如何在Vue 3中创建一个具有搜索、清除、加载状态等多功能的搜索框组件(InputSearch),并提供了组件的配置选项、事件处理和使用示例。
Vue3搜索框(InputSearch)
|
2月前
Vue3步骤条(Steps)
这是一个基于 Vue2 的步骤条(Steps)组件,支持多种自定义属性,如步骤数组、宽度、大小、垂直显示、标签位置等。通过 `v-model` 可实现步骤的动态切换和点击交互。提供了丰富的样式调整选项,适用于各种场景下的多步骤流程引导。组件内详细展示了如何创建和使用步骤条,并提供了多个示例代码片段。
Vue3步骤条(Steps)
|
2月前
Vue3文本域(Textarea)
这是一个基于 Vue3 的可自定义文本域组件 (`Textarea`),具备多种实用功能,如自适应内容高度、清除图标、字数统计及禁用状态等。
Vue3文本域(Textarea)
|
2月前
|
数据可视化 Apache 索引
Vue3使用echarts仪表盘(gauge)
Apache ECharts 是一款强大的数据可视化库,其仪表盘图表(`gauge`)可用于展示度量数据。主要属性包括仪表盘数据源 `gaugeData`(必填)、容器宽度 `width`(默认 100%)及高度 `height`(默认 100%)。数据项需指定名称 `name` 和值 `value`,并支持额外属性。
Vue3使用echarts仪表盘(gauge)
|
2月前
Vue3拖拽插件(vuedraggable@next)
vuedraggable 是一款 Vue2 拖拽插件,可轻松实现列表项的拖拽排序与交互。通过简单配置,即可在不同区域间拖动元素并实现数据同步。支持多种事件监听和自定义样式。
144 2
Vue3拖拽插件(vuedraggable@next)
|
2月前
|
容器
Vue3弹出确认(Popconfirm)
这是一个基于Vue3的弹出确认框组件(Popconfirm),提供了丰富的自定义选项和事件处理功能。组件支持设置标题、描述、按钮文本及样式等,并可通过slot进行自定义内容。
Vue3弹出确认(Popconfirm)
|
2月前
|
前端开发 Java
成功解决:java.lang.String cannot be cast to java.lang.Integer
这篇文章记录了作者在使用Axios二次封装时遇到的一个Java类型转换问题,即前端传递的字符串参数不能直接转换为Integer类型,文章提供了正确的转换方法来解决这个问题。
成功解决:java.lang.String cannot be cast to java.lang.Integer
|
2月前
|
JavaScript API 容器
Vue3气泡卡片(Popover)
这是一个基于Vue的气泡卡片组件(Popover)介绍,提供了在线预览链接及详细API参数说明,包括maxWidth、title、content等,并支持自定义样式。
Vue3气泡卡片(Popover)
|
2月前
|
JavaScript
Vue3数值动画(NumberAnimation)
该文档介绍了一个基于 Vue 的数值动画组件 `NumberAnimation`,提供了丰富的配置选项,如起始值、目标值、动画时长等,并支持自定义前缀、后缀及样式。通过简单的方法和事件,可以轻松控制动画的播放与停止。
Vue3数值动画(NumberAnimation)