刷题-KMP算法

来源:互联网 发布:怎么做淘宝生意好起来 编辑:程序博客网 时间:2024/05/16 19:36

Talk is cheap,show me the code.
晚上写原理总结

class Rotation {public:    bool chkRotation(string A, int lena, string B, int lenb) {        // write code here        A=A+A;        if(lena!=lenb) return false;        if(lena==0) return true;        bool re=findMatch(A,B);        return re;    }    vector<int> getNextArray(string match){        int len=match.size();        vector<int> next(len);        if(len==1){            next[0]=-1;            return next;        }        next[0]=-1;        next[1]=0;        int cn=0;        for(int i=2;i<len;i++){            if(match[i]==match[cn]){                cn++;                next[i]=cn;            }            else if(cn>0){                next[i]=cn;            }            else                next[i]=0;        }        return next;    }    bool findMatch(string str,string match){        int lena=str.size();        int lenb=match.size();        int si=0;        int mi=0;        vector<int> next=getNextArray(match);        while(si<lena&&mi<lenb){            if(str[si]==match[mi]){                si++;                mi++;            }            else if(next[mi]==-1){                si++;            }            else{                mi=next[mi];            }        }        return mi==lenb;    }};
原创粉丝点击