zoukankan      html  css  js  c++  java
  • 17 串 模式匹配算法

    模式匹配算法:

    #define MAXSIZE 255
    
    //串的顺序存储结构
    typedef struct{
        char ch[MAXSIZE+1];     //存储串的以为数组(必须是 char 型)从下标为1号的元素开始存储
        int length;     //串的当前长度
    }SqString;
    //模式匹配
    //确定主串中所含子串(模式串)第一次出现的位置(定位)
    //BF算法:暴力破解,穷举法,简单匹配算法,一个一个比较,
    int Index_BF(SqString S, SqString T){     //S:主串  T:模式串
        int i=1, j=1;
        while(i<=S.length && j<=T.length){
            if(S.ch[i] == T.ch[j]){     //若主串和子串匹配,则各自的游标i,j分别后移
                i++;                            //如果能成功匹配,则i,j的值会一直增加,知道大于或等于T.length,然后退出while循环
                j++;
            }else{      //匹配失败,说明子串和当前下标开始的主串的一段不匹配,回溯
                i = i-j+2;      //核心算法,两串的游标分别回到位置,为下一次匹配做准备
                j=1;
            }
        }
        //匹配结束
        /*
            包含两个可能,一:找到了符合匹配条件的串的位置(j>T.length); 二:匹配失败
        */
        if(j>T.length){
            return (i-T.length);        //匹配成功,返回主串中匹配到的第一个字符的下标
        }else{
            return 0;       //匹配到最后也不成功
        }
    }
  • 相关阅读:
    POJ 1458 Common Subsequence 【最长公共子序列】
    Codeforces Round #283 (Div. 2) A
    HDU 1009 FatMouse' Trade【贪心】
    HDU 2037 今年暑假不AC【贪心】
    Codeforces Round #282 (Div. 2) A
    HDU 2955 Robberies【01背包】
    bzoj4811
    bzoj2243
    bzoj2325
    bzoj3531
  • 原文地址:https://www.cnblogs.com/CPU-Easy/p/11727502.html
Copyright © 2011-2022 走看看