最長不重複字串 C C

2021-10-07 22:26:57 字數 2705 閱讀 9582

萬能的遍曆法 時間複雜度o(n^3)

沒有用到啥高深的演算法,遍歷就是了。

#include

"stdafx.h"

#include

#include

#include

// 有無重複字元

bool containrepeatch

(char

* str)}}

return false;

}int

_tmain

(int argc, _tchar* ar**)

memset

(resulte,

0, nlen +1)

;char

* ptemp = pdata;

char

* pbuf =

(char*)

malloc

(nlen +1)

;if(!pbuf)

for(

int i =

0; i < nlen; i++)}

}}printf

("最長不重複字串: %s\n"

, resulte)

;free

(pbuf)

;free

(resulte)

;getchar()

;return0;

}

輸出

最長不重複字串: hoinafk
遍曆法優化

1、使用後序遍歷

2、最長字串可能有多個,使用單鏈表儲存

3、遍歷時,小於已經臨時的最小字串長度的可以不判斷。

4、優化containrepeatch演算法

#include

"stdafx.h"

#include

#include

#include

// 有無重複字元

bool containrepeatch

(char

* str,

int nstart,

int nend)}}

return false;

}// 可能存在多個結果

typedef

struct listnode

;listnode*

initnode

(int nlen)

void

delallnode

(listnode* pnode)

free

(pnode->pdata)

; pnode->pdata =0;

delallnode

(pnode->pnext)

;free

(pnode);}

int_tmain

(int argc, _tchar* ar**)

else

nlonest = j - i +1;

}}} listnode* pnodeit = proot;

dowhile

(pnodeit)

;getchar()

;return0;

}

輸出結果

最長不重複字串: ef  長度 2

最長不重複字串: de 長度 2

最長不重複字串: cd 長度 2

最長不重複字串: bc 長度 2

最長不重複字串: ab 長度 2

說明

最長不重複字串的基本解法,不保證演算法效率最優。

其他優化解法

最長不重複 子串(輔助陣列 + hash), 時間複雜度o(n)

// 最長 不重複 子串(輔助陣列 + hash)

intlengthoflongestnorepeatsubstringtwo

(char

*string,

int length)

if(length ==1)

int maxsubstringlength =1;

int visitchararray[

256]=;

for(

int tmpindex =

0; tmpindex <

256; tmpindex++

)// 重複 數字 索引 下標

int repeatposition =0;

// 開闢 儲存 重複 字元 的陣列

int*positionarray =

(int*)

malloc

((length +1)

*sizeof

(int))

;for

(int tmpindex =

0; tmpindex <= length; tmpindex++

)for

(int tmpindex = length -

1; tmpindex >=

0; tmpindex--

)// 該字元 沒出現過

else

}for

(int tmpindex =

0; tmpindex < length; tmpindex++)}

free

(positionarray)

;return maxsubstringlength;

}

最長不重複字串

一直以為這個方法是對的,後來發現這種方法是錯誤的,不能處理巢狀的情況,如 adercijckega 稍後再修正!最近面試遇到這題,再網上參考了一些blog,自己歸納出方法並用c 實現。問題 求出字串中最長不重複的字串,如 abccdefgchi 最長不重複字串為defgchi.分析 1.定義乙個二維...

最長不重複字串

程式設計 給定兩個字串a,b 只包含26個英文本母 輸出所有公共的最長子字串 如果出現重複子串,則輸出多次 輸入包括兩行,每行為乙個連續字串 大小寫敏感 輸出包括多行,每行為掃瞄到的最長公共子串,按照該子串在字串a 即第一行輸入字串 中出現的先後次序輸出 abcxyzabcrst opqrstabc...

找出字串的最長不重複字串

這是我遇到的一道校招題目 給定一字串只包含數字,請寫乙個演算法,找出該字串中的最長不重複子串 不重複是指子串中每一元素不同於子串中其他元素 如 120135435 最長不重複子串為 201354 要求用j a或者c來寫,我用了j a。思想 從頭開始擷取字串,只要後乙個元素不在擷取的字串裡,就更新擷取...