首页 > 编程语言 >字符串匹配算法

字符串匹配算法

时间:2023-09-07 20:58:36浏览次数:43  
标签:Index 匹配 int length 算法 字符串 return SString

#include <stdio.h>
#define MaxSize 100

//定义 
typedef struct{
    char ch[MaxSize];
    int length;
}SString;

//朴素模式匹配算法 ,主串S,辅串T ,最坏时间复杂度:O(mn) 
int Index(SString S,SString T){
    int i=1,j=1;
    while(i<=S.length&&j<=T.length){
        if(S.ch[i]==T.ch[j]){
            ++i;
            ++j;
        }
        else{
            i=i-j+2;
            j=1;
        }
    } 
    if(j>T.length)
        return i-T.length;
    else
        return 0;
}

//KMP算法,最坏时间复杂度:O(m+n) ,主串指针不会变小 
int Index_KMP(SString S,SString T,int next[]){
    int i=1,j=1;
    if(i<=S.length&&j<=T.length){
        while(j==0||S.ch[i]==T.ch[j]){
            ++i;
            ++j;
        }
    }
    else{
        j=next[j];        //next数组需要提前手动求出 
    }
    if(j>T.length)
        return i-T.length;
    else
        return 0; 
} 

int main(){
    
}

 

标签:Index,匹配,int,length,算法,字符串,return,SString
From: https://www.cnblogs.com/zyj3955/p/17685995.html

相关文章

  • 代码随想录算法训练营第二天
    代码随想录算法训练营第二天|LeetCode977(有序数组的平方)LeetCode209(长度最小的子数组)LeetCode59(螺旋矩阵II)977:有序数组的平方LeetCode977(有序数组的平方)思路:方法一:暴力方法直接原地平方后,直接调用数组排序方法二:双指针前后遍历,构造结果数组,保证有序方法......
  • 机器学习算法原理实现——使用交叉熵、梯度下降求解逻辑回归
    交叉熵的定义以及和熵的区别?   交叉熵是衡量两个概率分布之间的差异的一个度量。在机器学习和深度学习中,尤其是分类问题,交叉熵常被用作损失函数。交叉熵度量的是实际分布(标签)与模型预测之间的不一致程度。 这个值越小,模型的预测与真实分布越接近。完美的预测会有交......
  • KMP算法详解
    呼——终于看懂了KMP——磕了三天了。题目直达Q:KMP是干什么的?是查找字符串用的,可以查找到\(S2\)字符串在\(S1\)字符串中出现的位置(当然,你可以统计出次数)。Q:那复杂度是多少的?通常,我们认为他的复杂度是\(O(|S1|)\),虽然有点常数。常规的的比较方法是直接比较,枚......
  • 算法单元重启啦!
    开始跟着代码随想录重新学算法了,计划是按照它的目录一个专题一个专题地刷。我的文章目录会放在下面,按照自己的进度更新,整理出来一些有价值的基础知识和题解代码。使用语言是python,但知识点部分也会涉及C++。欢迎阅读点赞~目录数组链表......
  • LRUCache算法缓存策略(map+doubleLinkedList)
    packagearithmetic;importjava.util.HashMap;publicclassFaceTest81{//LRUcache缓存策略map+双向链表//get、update、put需要时间复杂度达到O1//map+双向链表结构publicFaceTest81(intcapacity){ cache=newMyCache(capacity);}privateMyCache<Integer,Intege......
  • 剑指 Offer 46. 把数字翻译成字符串
    题目链接:剑指Offer46.把数字翻译成字符串题目描述:解法思路:代码://dp[i]=dp[i-1]+dp[i-2]//dp[i]表示长度为i的数字,翻译成字符串有多少种functranslateNum(numint)int{s:=strconv.Itoa(num)n:=len(s)dp:=make([]int,n+1)dp[0]=1......
  • 2023“钉耙编程”中国大学生算法设计超级联赛(4)
    1003SimpleSetProblem题意:分别从k个集合中选一个元素组成一个数组\((a_1,a_2,a_3,...,a_k)\),求max\((a_1,a_2,a_3,...,a_k)\)-min\((a_1,a_2,a_3,...,a_k)\)的最小值。分析:我们给每个集合中的元素添加一个id标识它属于哪个集合,然后将所有集合合并并按数值大小从......
  • CE搜字符串搜不到
    可能是字符串使用的是宽字符编码  需要搜索hexbyte......
  • day24 - 回溯算法part01
    回溯算法理论基础 77. 组合classSolution{public:vector<vector<int>>result;vector<int>path;voiddfs(intn,intk,intstart){if(path.size()==k){result.push_back(path);return;}......
  • Lnton羚通AI算法算力平台在海域可视化监管海域动态远程视频智能监管平台的构建方案
    一、方案背景随着科技的不断进步,智慧海域管理平台已成为海洋领域监管的关键工具。相比传统的视频监控方式,智慧海域管理平台通过建设近岸海域视频监控网、海洋环境监测网和海上目标探测网络等,实现了海洋管理的数字化转型。传统的监控方式需要大量人力物力,而智慧海域管理平台实现了......