leetcode刷題之路3 無重複字元的最長子串

2022-08-13 05:36:15 字數 2269 閱讀 8581

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"

輸出: 3

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

字元陣列和字串的區別,c語言字元陣列和字串區別詳解

開始的想法是在對字元陣列設定兩個指標,初始化乙個在位置0乙個在位置1,ans初始化為1(非空),然後1向後找,0不動,取0到1之間的字串,判斷是否重複(這裡單獨寫乙個函式,輸入字串,輸出是否重複以及重複字元的後乙個的位置),不重複的話用後位置減去前位置,再和ans比較,大的話就保留。如果有重複則前位置向後移動一位,後位置在其後面一位,接著判斷之間的字串是否重複。

#include using

namespace

std;

//判斷是否有重複

bool re_or_not(string

s) }

}std::cout

<< "

false

"

false;}

int lengthoflongestsubstring(string

s)

else

}return

num;

}int

main()

986 / 987 個通過測試用例

狀態:超出時間限制

真的尷尬

再來:優化,不用那個substring函式了

#include using

namespace

std;

//判斷是否有重複

bool re_or_not(string s,int begin,int

end)}}

std::cout

<< "

false

"

false;}

int lengthoflongestsubstring(string

s)

else

}return

num;

}int

main()

還是超時間;

再來:因為所有字元只有256個,所以定義這樣乙個陣列來判斷重複就行了,同時,在遇到重複時,begin和end都後移一位

//判斷是否有重複並輸出位置

bool re_or_not(std::string s,int begin,int end)

;for(int i = begin; i

int lengthoflongestsubstring(string s)

else

}return num;

}執行用時: 612 ms, 在longest substring without repeating characters的c++提交中擊敗了0.98% 的使用者

記憶體消耗: 332.3 mb, 在longest substring without repeating characters的c++提交中擊敗了0.93% 的使用者

這時間。。。。。,看來要大改了

還是上面的256的思路

#include #include 

using

namespace

std;

int lengthoflongestsubstring(std::string

s) ;

int num=1

;

int begin=0

;

for(int i=0;i)

else

//重複了,所以要把begin的位置更新到re中對應的字元對應的位置

re[s[i]]=i+1;//

+1是為了防止出錯,因為i是從0開始的,後面的都要判斷是否為0,所以要區別開

std::cout << "

此時i=

"<< i << "

此時num=

"<< num <}

return

num;

}int

main()

執行用時: 32 ms, 在longest substring without repeating characters的c++提交中擊敗了49.69% 的使用者

記憶體消耗: 14.7 mb, 在longest substring without repeating characters的c++提交中擊敗了0.93% 的使用者

還可以吧

Leetcode刷題之路 3 無重複的最長字串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...

LeetCode刷題之路 無重複字元的最長子串

無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 s bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入...

LeetCode 刷題 3 無重複最長子串

題目描述 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。測試示例 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。輸入 pwwkew 輸出 3 解釋 因為...