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

 

华为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;
}

 

posted @ 2016-08-16 17:33  0giant  阅读(635)  评论(0编辑  收藏  举报