牛客網面試筆試專題 兩串旋轉練習題

2021-09-12 23:05:03 字數 1610 閱讀 1895

kmp演算法講解---

如果對於乙個字串a,將a的前面任意一部分挪到後邊去形成的字串稱為a的旋轉詞。比如a="12345",a的旋轉詞有"12345","23451","34512","45123"和"51234"。對於兩個字串a和b,請判斷a和b是否互為旋轉詞。

給定兩個字串ab及他們的長度lenalenb,請返回乙個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第二個棧,...