字串類演算法題目總結

2021-09-07 08:46:31 字數 606 閱讀 1282

之前有一篇文章總結了一些字串類的演算法題目。

這裡接著看。

給定乙個字串,求出其最長重複子串

例如:abcdabcd

最長重複子串是 abcd,最長重複子串可以重疊。

直觀的解法是,首先檢測長度為 n - 1 的字串情況,如果不存在重複則檢測 n - 2, 一直遞減下去,直到 1 。

這種方法的時間複雜度是 o(n * n * n),其中包括三部分,長度緯度、根據長度檢測的字串數目、字串檢測。

改進的方法是利用字尾陣列

字尾陣列是一種資料結構,對乙個字串生成相應的字尾陣列後,然後再排序,排完序依次檢測相鄰的兩個字串的開頭公共部分。

這樣的時間複雜度為:生成字尾陣列 o(n),排序 o(nlogn*n) 最後面的 n 是因為字串比較也是 o(n)

依次檢測相鄰的兩個字串 o(n * n),總的時間複雜度是 o(n^2*logn),優於第一種方法的 o(n^3)

方法二:kmp

通過使用next陣列的特性,同樣可以求最長重複子串,不過時間複雜度有點高挖。。

題目描述:求最長不重複子串(指的是沒有重複字串出現),如abcdefgegcsgcasse,最長不重複子串為abcdefg,長度為7

c 字串類題目

感覺如果每次都單篇發的話,會很臃餘,所以就打算每次進行修改然後放在一篇文章裡了 1 給定字串,去掉所有重複,如abcda返回abcd,或bcdeeeee,返回bcde 求解 最優時間複雜度求解 include using namespace std 刪除字串中所有重複的字元,例如google,刪除重...

演算法題目 字串操作

迴圈移位 迴圈移位可以通過部分翻轉然後整體翻轉來完成 字串迴圈移位包含 給定兩個字串 s1 和 s2,要求判定 s2 是否能夠被 s1 做迴圈移位得到的字串包含。s1 aabcd,s2 cdaa return true s1 進行迴圈移位的結果是 s1s1 的子字串,因此只要判斷 s2 是否是 s1...

字串 演算法總結

1.字串的複製 char scopy char str1,const char str2 int main char scopy char str1,const char str2 str1 j 0 return str1 2.字串的回文 判斷字串是否是回文 include include usin...