字符串匹配算法--暴力匹配(Brute-Force-Match)C語言實現


一、前言

暴力匹配(Brute-Force-Match)是字符串匹配算法里最基礎的算法,雖然效率比較低,但勝在方便理解,在小規模數據或對時間無嚴格要求的情況下可以考慮。

二、代碼

#include <stdio.h>
#include <string.h>
int bf(char *l,char *s);
int main(void)
{
    char s1[201],s2[201];    //根據需要設定數組大小
    printf("母串:");
    scanf("%s",s1);
    printf("子串:");
    scanf("%s",s2);
    int a=strlen(s1),b=strlen(s2),re=0;
    if(a>=b)                //母串長度要比子串長
    {
        re=bf(s1,s2);
        if(re==1)
            printf("%s是%s的子串",s2,s1);
        return 0;
    }
    else
        printf("無法匹配");
    return 0;
}

int bf(char *l,char *s)
{
    if(!strcmp(l,s))      //如果兩個字符串相同直接返回
        return 1;
    int ll=strlen(l),sl=strlen(s),di=ll-sl;
    for(int i=0;i<=di;i++)
    {
        int temp=0;
        for(int j=0;j<sl;j++)
        {
            if(l[i+j]==s[j])
                continue;
            else
                {
                    temp=1;
                    break;
                }
        }
        if(temp==1)
            continue;
        else if(temp==0)
            return 1;
    }
    printf("子串不存在");
    return 0;
}

三、主要思路

每次從子串與母串的第一個字符開始比較,若是匹配成功則繼續下一個字符的匹配;若是匹配失敗則從母串的下一個字符開始與子串的第一個字符重新匹配,循環往復直到匹配成功或者匹配失敗。

四、分析時間復雜度

我們設子串長為m,母串長為n,同時m比n小的多。

在最好情況下,子串與母串的失配都是發生在第一個字符處,時間復雜度為O(m+n)。
在最壞的情況下,即子串每一次與母串失配都是在最后一個字母時,時間復雜度為O((m*n)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM