求字串的不重複字元的最長子串長度的問題

2021-07-23 17:20:14 字數 755 閱讀 6702

已知乙個字串,只含有小寫字母,求這個字串的每個字元都不相同的最長子串的長度。

比如:abcd 結果是4

abcab 結果是3

用乙個26個元素的整形陣列表示乙個字串中是否含有某個字元。a~b分別對映到陣列元素0~25。

用兩個指標分別指向字串的第乙個和第二個元素,用第二個指標從左往右掃瞄字串。每掃瞄乙個字元,根據陣列中對應的值來判斷這個字元是否已經出現。

如果沒出現,則繼續掃瞄,同時更新已知不相同子串的最大長度。

如果出現過,那麼向右移動第乙個指標,直到剛才重複的那個字元不再重複,然後繼續上面的工作。

#include #include #include int lns(char *str){

int length, max = 1, temp;

int i, j;

int a[26];

length = strlen(str);

memset(a, 0, sizeof(a));

a[str[0] - 'a'] = 1;

i = 0;

j = 1;

temp = 1;

while((j < length) && (i < length - max)){

// printf("j= %d, i=%d\n", j,i);

// printf("result:%d", a[str[j] - 'a']);

if(a[str[j] - 'a'] =&

求字串的不重複字元的最長子串長度的問題

已知乙個字串,只含有小寫字母,求這個字串的每個字元都不相同的最長子串的長度。比如 abcd 結果是4 abcab 結果是3 思路 用乙個26個元素的整形陣列表示乙個字串中是否含有某個字元。a b分別對映到陣列元素0 25。用兩個指標分別指向字串的第乙個和第二個元素,用第二個指標從左往右掃瞄字串。每掃...

求字串中不含重複字元的最長子串

今天逛脈脈,在上面看到乙個求字串中不含重複字元的最長子串,如果突然看到這個題,當時真的是寫不出,更何況最優解了,這個題以前出去面試的時候被考到過,當時也沒有寫出來,所以在網上看了這道題的答案後自己試著寫了下,並將自己的理解記錄下來 總體思路 1.設定兩個游標,一左一右,剛開始都設定成0,設定乙個se...

最長不重複字串

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