• Sunday


    字符串匹配中最简单的算法:

    基本思路:wandderwonder

         wonder

        建立256个长的next数组,记录每个字符最后一次出现的位置。

        设mark1 = 0; 和 mark2 = 0;flag = mark1;两个串从头开始出发,到第二个字符不相等,那么一定不是第一个字符开始的字符串,mark1向后移动len2 个,即为e 。看匹配字符串的e最后出现的位置,根据该位置找到如果此位置是匹配串的头,flag标记,mark = 0,继续比较。。。

    代码:

    int* GetNext(char* st)
    {
        int len = strlen(st);
        int* next = (int*)malloc(sizeof(int)*256);
        memset(next,-1,sizeof(int)*256);
        for(int i = 0; i < len; i++)
        {
            next[st[i]] = i;
        }
        return next;
    }
    int Sunnay(char* str,char* st)
    {
        int *next = GetNext(st);
        int len1 = strlen(str);
        int len2 = strlen(st);
        int mark1 = 0;
        int mark2 = 0;
        int flag = 0;
        while((mark1<len1) && (mark2<len2))
        {
            if(str[mark1] == st[mark2])
            {
    
                mark1++;
                mark2++;
            }
            else
            {
                flag += len2;
                if(flag >=len1)
                    break;
                flag = flag - next[str[flag]];
                mark1 = flag;
                mark2 = 0;
            }
        }
        if(mark2 == len2)
         {
             return mark1 - len2;
         }
        else //(mark1 == len1)
            return -1;
    }
  • 相关阅读:
    2019/1/17 break语句小练习
    2019/1/17goto语句小试牛刀
    python 中* 和**的作用
    python 元组编码和解码问题
    python SMTP 发送邮件
    python 自定义异常
    python websocket client 使用
    excel、xls文件读写操作
    windows10局域网实现文件共享
    django入门
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9152276.html
Copyright © 2020-2023  润新知