【每天一道算法题】字符串查找

华为OJ上的,昨天没做题,今天2道。 

用数组记录之前匹配的状态。最后遍历数组就行。类似最大公共子串。

#include <string>
#include <iostream>
using namespace std;

int main(){
    string src;
    string des;
    cin>>src;
    cin>>des;

    int len1=src.length();
    int len2=des.length();

    int arrstr[129]={0};
    for(int i=0,j=0;i<len1&&j<len2;){
        if(src[i]==des[j]||des[j]=='?'){
            if(i==0||j==0)
                arrstr[i]=1;
            else arrstr[i]=arrstr[i-1]+1;
            j++;
        }
        else arrstr[i]=0;
        i++;
    }
    for(int i=0;i<len1;i++){
        if(arrstr[i]==len2){
            for(int j=i-len2+1;j<=i;j++)
                cout<<src[j];
            break;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/LUO77/p/5777215.html