博客
关于我
#Leetcode# 28. Implement strStr()
阅读量:794 次
发布时间:2023-01-25

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

C#实现StrStr函数的细节分析——寻找子字符串的方法

在编程的过程中,常需要实现某一特定功能的高效算法。本文将详细解析如何在字符串 haystack 中查找第一位出现子字符串 needle 的方式,并提供相应的代码实现。

代码简要说明:

  • 结构初始化

    首先,我们需要获取 haystack 和 needle 的长度。

    int l1 = haystack.length(), l2 = needle.length();

    接下来,进行基本的参数校验。如果 needle 的长度大于 haystack,则直接返回-1。

    if (l2 > l1) return -1;

    另外,如果 needle 为空字符串,按题意应该返回0。

    if (needle.empty()) return 0;
  • 滑动窗口遍历

    采用滑动窗口的方式遍历 haystack。窗口的大小等于 needle 的长度,遍历次数则为 haystack.length() - hay.getWindowSize() + 1。

    for (int i = 0; i <= l1 - l2; i++)
  • 字符匹配

    在每一次遍历中,逐个字符比较 haystack窗口内的字符与 needle 中的对应字符。注意,这种方法可能会重复进行同一字符的比较,因此需要引入计数器来记录匹配的进度。

    int cnt = 0;for (int j = 0; j < l2; j++)

    只要发现一个字符不匹配,就立即终止当前的匹配过程,并继续下一个窗口的检查。只有所有字符都匹配时,才满足条件。

    if (haystack[i + j] != needle[j]) break;else cnt++;
  • 返回结果

    如果在某次循环中匹配成功,则返回当前窗口的起始索引i。

    if (cnt == l2) return i;
  • 无匹配返回

    如果遍历完所有可能的窗口都没有找到匹配的子字符串,则返回-1。

    return -1;
  • 示例解析

    让我们以示例1进行分析:

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

    这种方法能够正确找到第二个字符位置开始的"ll"。通过上述算法,i=0时,检查第0和第1个字符是否与

    转载地址:http://jkryk.baihongyu.com/

    你可能感兴趣的文章
    iOS_Runtime3_动态添加方法
    查看>>
    我用wxPython搭建GUI量化系统之最小架构的运行
    查看>>
    selenium+python之切换窗口
    查看>>
    Find Familiar Service Features in Lightning Experience
    查看>>
    map[]和map.at()取值之间的区别
    查看>>
    VTK:可视化之RandomProbe
    查看>>
    Java时间
    查看>>
    【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
    查看>>
    pair的用法
    查看>>
    javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
    查看>>
    echarts 基本图表开发小结
    查看>>
    TreeSet、TreeMap
    查看>>
    JVM内存模型
    查看>>
    可变长度参数
    查看>>
    GitHub上传时,项目在已有文档时直接push出现错误解决方案
    查看>>
    嵌入式系统试题库(CSU)
    查看>>
    00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
    查看>>
    00013.05 字符串比较
    查看>>
    SpringCloud-Eureka报错 Error creating bean with name解决
    查看>>
    UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
    查看>>