首页 > 编程语言 >记录一下自己的优化字符串匹配算法

记录一下自己的优化字符串匹配算法

时间:2024-11-02 22:42:33浏览次数:1  
标签:匹配 int pattern next char 算法 text 字符串

我愿称之KeBF算法

Ke的BF(Brute Force,暴力检索)法

关于其他 字符串匹配算法

示例源码

#include <stdio.h>
#include <string.h>

int main()
{
    // 读入两个字符串
    char ms[100], ps[100];
    fgets(ms, sizeof(ms), stdin);
    fgets(ps, sizeof(ps), stdin);

    // 去掉换行符
    ms[strcspn(ms, "\n")] = '\0';
    ps[strcspn(ps, "\n")] = '\0';

    int j = 0, index[100];
    int msL = strlen(ms);
    int psL = strlen(ps);
    // 算法实现
    for (int i = 0; i <= msL - psL; )
    {
        if ((msL - i) < psL)
            break;
        int t = 0;
        while (t < psL && ms[i + t] == ps[t])
            t++;
        if (t == psL)
        {
            index[j] = i;
            j++;
            i += t;
        }
        else
            i += (t > 0) ? t : 1;
    }
    // 输出结果
    if (j > 0)
        for (int i = 0; i < j; i++)
            printf("%d ", index[i]);
    else
        printf("None");
    printf("\n");

    return 0;
}

与FittenCode的斗志斗勇

大胜利!

所以——

谁能拒绝一个写法比KMP简单,时间复杂度摸摸KMP(O(n) & O(m+n)),空间复杂度大概持平KMP的可可爱爱的KeBF呢

标签:匹配,int,pattern,next,char,算法,text,字符串
From: https://www.cnblogs.com/churk/p/18522619

相关文章

  • 深度讲解-互联网算法备案指南和教程
    随着人工智能和大数据技术的迅猛发展,互联网算法在内容推荐、用户画像、智能客服等领域发挥着越来越重要的作用。然而,算法的广泛应用也带来了潜在的安全风险和合规挑战。为了规范互联网算法的开发与应用,国家互联网信息办公室等相关部门发布了《互联网算法备案管理规定》,要求具备......
  • C和C++的字符串有什么不同?
    一、C语言中字符串的存储方式C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,且以字符\0结尾;字符数组存储在C语言中,字符串常常以字符数组的形式进行存储。例如:charstr[]="Hello";这里定义了一个字符数组str,编译器会自动在字符串......
  • 代码随想录算法训练营第十天|leetcode232.用栈实现队列、leetcode225. 用队列实现栈、
    1leetcode232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)文章链接:代码随想录视频链接:栈的基本操作!|LeetCode:232.用栈实现队列哔哩哔哩bilibili自己的思路:真的第一次接触这个概念,完全没有任何思路,甚至不知道从何下手1.1基本概念栈就是相当于砌墙的砖头,先......
  • 代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串、
    1leetcode151.翻转字符串里的单词题目链接:151.反转字符串中的单词-力扣(LeetCode)文章链接:代码随想录视频链接:字符串复杂操作拿捏了!|LeetCode:151.翻转字符串里的单词哔哩哔哩bilibili自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作......
  • C++优选算法 分治-快排
    一、基本思想快速排序采用分治法策略,将一个大数组(或子数组)分为两个小数组,然后递归地对这两个小数组进行排序。其基本思想可以概括为“分解、解决、合并”三个步骤:分解:将原问题(即待排序的数组)分解为若干个规模较小、相互独立且与原问题形式相同的子问题(即子数组)。解决:若子问题......
  • 集智书童 | 利用知识蒸馏算法优化 YOLOv5 目标检测 !
    本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。原文链接:利用知识蒸馏算法优化YOLOv5目标检测!这篇论文探讨了知识蒸馏技术在目标检测任务中的应用,尤其是不同蒸馏温度对学生模型性能的影响。通过将YOLOv5s作为教师网络和较小的YOLOv5s作为学生网络,作者发现,随......
  • C和C++的字符串有什么不同?
    C字符串C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,且以字符 \0结尾;#include<stdio.h>intmain(){ charstr[4]="sv";//charstr[3]="sv";是错的 charstr[]="sv"; charstr[4]={'s','','v'......
  • tarjan算法
    强连通分量细节对于多点跑tarjan来说,可能会有先访问\(u\tov\)中的\(v\),这导致\(dfn[v]<dfn[x]\),后面\(x\)跑tarjan时会误把\(v\)当成祖先,要加判断割点&割边删去后使图不连通的点/边找割边和强连通分量求法大差不差,这里不再赘述找割点不同于前两者,首先割点不是low[x]==dfn......
  • 【排序算法】堆排序
    ......
  • 动态规划-回文串系列——1312.让字符串变成回文串的最小插入次数
    1.题目解析题目来源:1312.让字符串变成回文串的最小插入次数——力扣测试用例2.算法原理1.状态表示一维dp表无法存储任意区间内将字符串变为回文子串的最小插入次数,所以使用二维dp表存储将[i,j]区间的字符串变为回文子串的最小插入次数dp[i][j]:将[i,j]区间的字......