萬能的遍曆法 時間複雜度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。思想 從頭開始擷取字串,只要後乙個元素不在擷取的字串裡,就更新擷取...