kmp演算法講解---
如果對於乙個字串a,將a的前面任意一部分挪到後邊去形成的字串稱為a的旋轉詞。比如a="12345",a的旋轉詞有"12345","23451","34512","45123"和"51234"。對於兩個字串a和b,請判斷a和b是否互為旋轉詞。
給定兩個字串a和b及他們的長度lena,lenb,請返回乙個bool值,代表他們是否互為旋轉詞。
測試樣例:
"cdab",4,"abcd",4
返回:true
思路:將a連線成a+a,在用kmp演算法進行a+a和b的匹配判斷,如匹配成功就返回true,若匹配失敗就返回false.
c++
#includeusing namespace std;
bool chkrotation(string a, int lena, string b, int lenb)
int main()
string b2 = b + b;
return getindexof(b2, a) != -1;
} // kmp algorithm
public int getindexof(string s, string m)
char ss = s.tochararray();
char ms = m.tochararray();
int si = 0;
int mi = 0;
int next = getnextarray(ms);
while (si < ss.length && mi < ms.length) else if (next[mi] == -1) else
} return mi == ms.length ? si - mi : -1;
} public int getnextarray(char ms) ;
} int next = new int[ms.length];
next[0] = -1;
next[1] = 0;
int pos = 2;
int cn = 0;
while (pos < next.length) else if (cn > 0) else
} return next;
}}
kmp演算法
#include #include #include using namespace std;
//next函式
const vector* kmp_next(string &m)
if(m[i]==m[temp])
next[i]=temp+1;
else next[i]=0;
} return &next;
}//匹配函式
bool kmp_search(string text,string m,int &pos)
} if(tp==text.size()) return false;
}int main()
c c 面試筆試知識點 牛客網(1)
我最近在牛客網上做題目,每道題目都有一些小的知識點,我把它總結下來,給大家分享,希望給面試筆試的人一些幫助。有些知識點太多了,所以只寫了知識點。希望大家多多指出,共同進步,拿到乙份好的offer。1.int n 10 是陣列指標 sizeof n 4 int n 10 是指標陣列 sizeof n ...
牛客網 確定兩串亂序同構
題目描述 給定兩個字串,請編寫程式,確定其中乙個字串的字元重新排列後,能否變成另乙個字串。這裡規定大小寫為不同字元,且考慮字串重點空格。給定乙個string stringa和乙個string stringb,請返回乙個bool,代表兩串是否重新排列後可相同。保證兩串的長度都小於等於5000。測試樣例...
牛客網習題練習 倒置字串
題目表述 將一句話的單詞倒置,標點不倒置,例如 輸入 i like beijing.輸出 beijing.like i 實現思路 設定兩個棧,先將字串逐個壓入第乙個棧,如果遇到空格的話就說明乙個單詞結束,將第乙個棧的所有元素包括空格壓入第二個棧,迴圈執行,直到字串全部入棧。最後,依次pop第二個棧,...