• Sunday算法


    首先i,j两个指针指示的位置(从头开始匹配),当发现失配的时候就判断子串的后一位在母串的字符是否在子串中存在? 若存在则将该位置和子串中的该字符对齐,再从头开始匹配;

    若不存在 直接向后移动l2;

    #include <bits/stdc++.h>
    
    using namespace std;
    
    
    
    int sunday(const char* text,const char* find)
    {
        if (text == NULL || find == NULL)
        {
            return -1;
        }
        int map[CHAR_MAX];
        int i;
        int l1 = strlen(text);
        int l2 = strlen(find);
        if (l1 < l2)
        {
            return -1;
        }
        for (int i = 0;i<CHAR_MAX;i++)
        {
            map[i] = l2 + 1;
        }
        for (int i = 0;i<l2;i++)
        {
            map[find[i]] = l2 - i;
        }
        for (int i = 0;i<l2;i++)
        {
            cout << find[i] << "  " << map[find[i]] << endl;
        }
        i = 0;
        while (i <= (l1 - l2))
        {
            if (strncmp(find,text+i,l2) == 0)
            {
                return i;
            }
            else 
            {
                i += map[text[i+l2]];
                cout << i << endl; 
            }
        }
        return -1;
    }
    int main()
    {
        char a1[] = "aaaaaaabca";
        char a2[] = "aab";
        cout << sunday(a1,a2);
        cout << CHAR_MAX << endl;
     } 
  • 相关阅读:
    cocos3 单击
    cocos3 帧动画
    cocos3 动作和帧动画
    cocos3 场景切换特效
    cocos3 场景切换
    cocos3 error C2440
    c++ 匿名函数
    【leetcode】生成每种字符都是奇数个的字符串
    【leetcode】山羊拉丁文
    【leetcode】字符串的最大公因子
  • 原文地址:https://www.cnblogs.com/yifi/p/6708900.html
Copyright © 2020-2023  润新知