• LeetCode28——实现strStr()


      6月中下旬辞职在家,7 月份无聊的度过了一个月。8 月份开始和朋友两个人写项目,一个后台和一个 APP ,APP 需要对接蓝牙打印机。APP 和蓝牙打印机都没有搞过,开始打算使用 MUI 开发 APP ,这样学习成本会低一些。但是蓝牙打印机的供应商不提供打印机的指令集,只提供了原生 Android 的 SDK ,因此无奈必须要学习 Android 的原生开发。8 月份加油啊!

    LeetCode 题库的第 28 题——实现strStr()

      题目如下:

     

    解题代码

      该题就是两层循环,第一层循环主要是遍历字符串,第二层循环用来进行匹配。实现代码如下:

     1 int strStr(char* haystack, char* needle) {
     2     int pos = -1;
     3     int str1len = strlen(haystack);
     4     int str2len = strlen(needle);
     5     
     6     int i, n, j;
     7     
     8     if ( str2len == 0 ) {
     9         return 0;
    10     }
    11     
    12     for ( i = 0; i < str1len; i ++ ) {
    13         n = i;
    14         for ( j = 0; j < str2len; j ++ ) {
    15             if ( haystack[n++] == needle[j] ) {
    16                 if ( j == str2len - 1 ) {
    17                     pos = i;
    18                     goto EXIT;
    19                 }
    20             } else {
    21                 break;
    22             }
    23         }
    24     }
    25 EXIT:
    26     return pos;
    27 }

      以上是我的解题代码,就是使用两层来进行实现,没有太好的思路,所以解题思路就没什么可说的了。上面的代码,其实还可以减少循环的次数,但是会增加一些代码量,LeetCode 对以上代码执行的时间显示为 1800 多毫秒。那么就增加一个判断,让循环次数少一些,增加的代码如下:

     1     for ( i = 0; i < str1len; i ++ ) {
     2         if ( str1len - i < str2len ) {
     3             return pos;
     4         }
     5         n = i;
     6         for ( j = 0; j < str2len; j ++ ) {
     7             if ( haystack[n++] == needle[j] ) {
     8                 if ( j == str2len - 1 ) {
     9                     pos = i;
    10                     goto EXIT;
    11                 }
    12             } else {
    13                 break;
    14             }
    15         }
    16     }

            看上面的代码,只是在第一层的 for 循环中增加了一个判断,但是 LeetCode 给出的执行时间是 0 毫秒,是不是很惊人?为什么会这样呢?原因其实很简单,当 needle 很短的时候这个判断是没有太大差别的,但是当 needle 特别长的时候,减少的循环次数就非常明显了。


    我的微信公众号:“码农UP2U”

  • 相关阅读:
    linux基本操作
    第一个单元测试
    .Net6中的System.Text.Json
    使用 Minio 和 Microsoft SQL Server 2022 组合访问 Data Anywhere
    龙芯发布 .NET 6 SDK 6.0.105ea1 LoongArch64 版本
    .NET 6.0.6 和 .NET Core 3.1.26、Visual Studio 2022 17.2 和 17.3 Preview 2 和 .NET 7.0 Preview 5 同时发布
    一个用于 Microsoft.Extensions.Logging 的测试库MELT
    在OpenCloudOS使用snap安装.NET 6
    distroless 镜像介绍及 基于cblmariner的.NET distroless 镜像的容器
    [AWS] Solve Error: No PEM start marker "b'BEGIN PRIVATE KEY'" found
  • 原文地址:https://www.cnblogs.com/tosser/p/9452568.html
Copyright © 2020-2023  润新知